1. 思想

step1. 从数列中挑出一个元素,称为 “基准”(pivot)。

step2. 分区(partition):重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。

step3. 递归地(recursive)把基准值左边的子数列和右边的子数列排序。

1.1 具体实现

step1. 以最左边为基准值,将a[low]作为pivot
step2. j值开始是low+1,i从j开始循环,将j指向当前第一个比pivot大的值,如果发现数组中有一个比pivot小,就将a[i]与a[j]替换
step3. 循环结束,此时a[low]是pivot,a[low+1]到a[j-1]的值都小于pivot,j右边的值都大于pivot。将a[low]与a[j-1]互换

1.2 图示

递归:

1.3 code

        void swap(int& a, int& b){int t = a;a = b;b = t;}int partition(int arr[], int low, int high){int pivot = arr[low]; // pivotint j = low+1; // Index of smaller element and indicates the right position of pivot found so farfor (int i = j; i <= high; i++){// If current element is smaller than the pivotif (arr[i] < pivot){swap(arr[j], arr[i]);j++; // increment index of smaller element}}swap(arr[j-1], arr[low]);return (j-1);}void quickSort(int A[], int low, int high) //快排母函数{if (low < high) {int pivot = partition(A, low, high);quickSort(A, low, pivot - 1);quickSort(A, pivot + 1, high);}}void test() { int a[] = { 1, 4, 5, 2, 10, 8 };int nSize = sizeof(a) / sizeof(int);quickSort(a, 0, nSize-1);}

eg.

数组: 4 2 5 3 10
pivot: 4开始:
4 2 5 3 10j->
4 2 5 3 10j
->
4 2 3 5 10j循环结束:再将a[low] 与a[j-1]互换->
3 2 4 5 10

【引用】

[1] 代码quickSort.h

排序 (2)快速排序相关推荐

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

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

  2. 9个元素换6次达到排序序列_(算法四)高级排序(快速排序)

    1.快速排序 快速排序是对冒泡排序的一种改进.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速 ...

  3. 排序算法 —— 快速排序

    快速排序算法介绍 划分问题:把数组的各个元素重排后分成左右两个部分,使得左边任意元素都小于或等于右边任意元素. 递归求解:把左右两部分分别排序. 快速排序代码 #include <iostrea ...

  4. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  5. 掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等)...

    掌握常见的内部排序方法(插入排序,冒泡排序,选择排序,快速排序,堆排序,希尔排序,归并排序,基数排序等). 数组高级以及Arrays(掌握) 排序方法 空间复杂度 时间复杂度 稳定性 插 入 排 序 ...

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

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

  7. java的 交换排序 快速排序算法_数据结构之排序算法Java实现(4)—— 交换类排序之快速排序算法...

    快速排序算法属于"交换类"的排序,它的效率主要跟数据分布是否对称有关. 升序排序: /** * 快速排序 * 升序排序 */ @Override public > void ...

  8. 点集排序(快速排序)

    点集排序算法,首先是要定义单个点如何确定大小,它不像数字那样是一维的,点是一个二维,所以在定义点的时候要定义点如何比较大小. 点的大小一般来说,都是从左到右,从下到上的一个顺序,也就是说首先比较X方向 ...

  9. 希尔排序、快速排序、归并排序的实现分析以及时间复杂度

    高级排序 希尔排序 快速排序 归并排序 希尔排序 希尔排序是插入排序的一种,又称"缩小增量排序",是插入排序算法的一种更高效的改进版本. 我在另一篇文章中说插入排序的时候,会有一个 ...

  10. 算法---排序--希尔排序和快速排序

    冒泡.选择.插入排序算法是三种简单的排序算法,它们的时间复杂度大O表示法都是O(N2),如果数据量少,我们还能忍受,但是数据量大,那么这三种简单的排序所需要的时间则是我们所不能接受的.接着我们在讲解递 ...

最新文章

  1. Python os.chdir() 方法用于改变当前工作目录到指定的路径。
  2. MongoDB实现ID自增长
  3. lamp整合三连发(2)
  4. MaxScale Binlog Server
  5. mysql中的类型与java_mysql与java数据类型对应关系
  6. 面试精选:链表问题集锦
  7. eval函数linux,Python中的eval()、exec()及其相关函数
  8. 吴恩达机器学习 Coursera 笔记(二) - 单变量线性回归...
  9. java静态方法没有this,super与this无法用在static方法中
  10. AUTOCAD——表格样式
  11. 迅手系统连接不到服务器,逆火快速上手.doc
  12. 【例子】固定表格的首行与首列
  13. Adobe Photoshop download
  14. 防止关闭windows
  15. Android笔记(十九)制作一个简易的指南针
  16. 网易内推(Android) 拿offer
  17. 使用Markdown语言在博客的文章中添加视频
  18. 计算机科学速成课学习
  19. 计算机图形学---颜色视觉知识点
  20. R语言 线性回归分析实例

热门文章

  1. 利用Comet4J 及时推送消息
  2. 第十一届蓝桥杯java B组第二场-试题A: 门牌制作
  3. Android --- PagerAdapter的使用方法详细讲解
  4. access数据库拆分的用途_聊聊数据库设计一些经验 条条都是干货
  5. 排除计算机故障的顺序,计算机故障排除.ppt
  6. asp.net 调用苹果摄像头扫描条码_苹果刚刚发布了近两年最值得买的 iPhone
  7. Android访问瓦片地图 费流量,瓦片地图注意事项
  8. 美国政府已关闭 5800 个数据中心,计划关闭 1400 个
  9. 走,去谷歌的机房逛逛
  10. oracle供需平衡,OracleR12_MRP_功能介绍_V2.ppt