i--->   6, 5, 7, 8, 3 , 2 , 9 , 10   <----j
首先以第一个为基准值 6

1:           j从右边出发,在j移动到2的时候发现小于6,j停了下来,

然后i开始移动,当i移动到7的时候发现大于6,于是i也停了下来

然后i和j交换了他们所代表的值

6, 5, 7, 8, 3 , 2 , 9 , 10 -->   6, 5, 2, 8, 3 , 7 , 9 , 10

2:          然后j继续向左移动,在移动到3的时候发现小于6,j停了下来,

i也继续移动,当移动到8的时候发现大于6,于是i又停了下来

i和j交换了他们所代表的值

6, 5, 2, 8, 3 , 7 , 9 , 10   -->  6, 5, 2, 38 , 7 , 9 , 10

3:             继续,j继续向左移动,当移动到3的时候i == j,循环结束

这个时候呢,我们要把i代表的值和基准值进行交换

6, 5, 2, 3, 8 , 7 , 9 , 10   -->  3, 5, 2, 6, 8 , 7 , 9 , 10

在这个的整个过程中呢,6我们已经找好了它的位置,我们就不在管它了,于是我们把6前后分成了2组,[3,5,2] 和[8, 7, 9, 10]

我们再继续对[3, 5, 3]和[8, 7, 9, 10]重新上面的过程,最后我们就能得到最终结果:2,3,5,6,7,8,9,10

#include<iostream>
using namespace std;int a[] = {6, 5, 7, 8, 3, 2, 9, 10 };void QuickSort(int left, int right)
{if (left >= right) //如果left >= right就没有必要交换了,因为本身已经排序了return;int guard = a[left];int i = left;int j = right;while (i != j) {while (a[j] >= guard && i < j) //保证每次要先从右边开始遍历j--;while (a[i] <= guard && i < j)i++;if (i < j) {int t = a[i];a[i] = a[j];a[j] = t;}}a[left] = a[i]; //结束后要把基准值和当前的那个值进行交换a[i] = guard;QuickSort(left, i - 1);QuickSort(i+1, right);
}int main()
{QuickSort(0, sizeof(a)/sizeof(int) -1);for (int i = 0; i < sizeof(a)/sizeof(int) ;i++ )cout << a[i] << " " ;cout << endl;
}

转载于:https://www.cnblogs.com/457220157-FTD/p/4057187.html

一天一算法:快速排序相关推荐

  1. 读《c#与算法--快速排序》随笔

    <c#与算法--快速排序>地址: http://www.cnblogs.com/isun/archive/2009/04/25/1443603.html 随手写的测试DEMO,web程序不 ...

  2. 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化

    今天讲解一下快速排序算法的原理以及实现.复杂度和稳定性分析与优化 目录 1 快速排序的原理 2 快速排序代码实现 3 复杂度和稳定性分析.优化 4 习题练习 1 快速排序的原理 快速排序是所有内部排序 ...

  3. 快速排序 java导包_排序算法-快速排序(Java实现)

    上篇我们讲了冒泡排序,这次我们讲它的升级版快速排序,"快速",一看就是个好算法~ 快速排序(QuickSort)是啥? 我们先看下百度百科的介绍快速排序(Quicksort)是对冒 ...

  4. 排序算法 快速排序 python 0913

    排序算法 快速排序 python 0913 快速排序 思路 定义快排方法 接收参数:原始列表,起始位置,终止位置 判断是否符合快排条件,当起始下标与终止下标相等时,代表只有一个元素,无法排序,退出 一 ...

  5. 排序算法 快速排序【详细步骤图解】

    排序算法 快速排序[详细步骤图解] 快速排序 主要思想 图解 第一轮分割序列 第二轮分割序列 --- 左子序列 小结 第三轮分割序列 --- 右子序列 C++实现 总结 快速排序 给定一个序列:22 ...

  6. 【图解算法】排序算法——快速排序

    简介 首先还是得简单的介绍一下快速排序这个算法. 快速排序(Quicksort),又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出.在平均状况下, ...

  7. JavaScript的排序算法——快速排序

    排序算法(Sorting algorithm)是计算机科学最古老.最基本的课题之一.要想成为合格的程序员,就必须理解和掌握各种排序算法. 快速排序(Quicksort)是对冒泡排序的一种改进. 快速排 ...

  8. 十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  9. 算法:快速排序实现 定制比较函数

    1. 快速排序基本算法 1 #include<stdio.h> 2 const static int NUM = 47; 3 4 int quick_sort(int *a, int st ...

最新文章

  1. python3练习,python3练习题 - 来自菜鸟的独白
  2. Java-二叉树算法
  3. android 保活方案_Android 后台保活手段总结 (上篇)
  4. 产品经理 - 汽车维修连锁企业 - 发展预测
  5. java基数排序简单实现_基数排序简单Java实现
  6. java-spark的各种常用算子的写法
  7. linux文本编辑器
  8. VB.NET (VB2008)的免费下载网址
  9. Flash遮罩之放大镜
  10. android开发之GPS定位详解
  11. 把码云项目上传到服务器,将本地项目上传到码云上(vue项目)
  12. 货币市场基金基础知识
  13. 李彦宏计算机领域的贡献,李彦宏:AI让计算机懂得人、响应人的需求
  14. 《爱的五种能力》读后感
  15. 计算机连接打印机连接打印机,怎么连接打印机.教您怎么连接打印机
  16. h3cr4900g3安装系统_H3C R4900 G2服务器通过HDM安装系统
  17. Android开发:LocationManager获取经纬度及定位过程(附demo)
  18. 突然被裁!国外程序员的各种花式报复手段,非常眼熟…
  19. Unity5权威讲解之菜鸟读书笔记(一)
  20. 行业短信 运营思路_游戏行业短信平台解决方案

热门文章

  1. HackerRank Gift Boxes(hash)
  2. LeetCode Populating Next Right Pointers in Each Node II(dfs)
  3. (一)swoole服务启动流程
  4. python中的eval
  5. getopt和getopt_long的使用
  6. C#基础-面向对象-多态
  7. Netty源码分析第6章(解码器)----第4节: 分隔符解码器
  8. Git版本库创建(包含文件权限设置 Linux环境下)
  9. Problem 2238 Daxia Wzc's problem 1627 瞬间移动
  10. 深入浅出SharePoint2013——获取Application Pool的id和name对照表