原理

快速排序(Quicksort)是对冒泡排序的一种改进。

  1. 从数列中挑出一个元素,称为"基准"(pivot);
  2. 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在本次排序退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
  3. 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

例子

将无序数组[3,6,4,2,5,1]进行快速排序

1),先把第一项[3]取出来作为基准依次与其余项进行比较(3出列后大喝一声,比我小的站前边,比我大的站后边,行动吧!霸气侧漏~),

如果比[3]小就放[3]前边,2 1都比[3]小,全部放到[3]前边

如果比[3]大就放[3]后边,6 4 5比[3]大,全部放到[3]后边,

一趟排完后变成下边这样:

排序前:3,6,4,2,5,1

排序后:2,1,3,6,4,5

2),对前面一半[2,1]继续进行快速排序

重复步骤1)后变成下边这样:

排序前:2,1

排序后:1,2

前面一半排序完成,总的数组为:

排序前:2,1,3,6,4,5

排序后:1,2,3,6,4,5

3),对后面一半[6,4,5]继续进行快速排序

重复步骤1)后变成下边这样:

排序前:6,4,5

排序后:4,5,6

后面一半排序完成,总的数组为:

排序前:1,2,3,6,4,5

排序后:1,2,3,4,5,6

至此,排序结束

动画演示

代码参考

     static void Main(string[] args){int[] intArray = { 3, 6, 4, 2, 5, 1 };Quick_Sort(intArray, 0, intArray.Length - 1);foreach (var item in intArray){Console.WriteLine(item);}Console.ReadLine();}// 快速排序static void Quick_Sort(int[] unsorted, int low, int high){int loc;if (low < high){loc = partition(unsorted, low, high);Quick_Sort(unsorted, low, loc - 1);Quick_Sort(unsorted, loc + 1, high);}}/// <summary>/// 分区操作/// </summary>/// <param name="unsorted">带排序数组</param>/// <param name="low">起始位置</param>/// <param name="high">结束位置</param>/// <returns>排序后基准所在位置</returns>static int partition(int[] unsorted, int low, int high){int pivot = unsorted[low]; // 基准while (low < high){while (low < high & unsorted[high] > pivot) high--;unsorted[low] = unsorted[high];while (low < high & unsorted[low] <= pivot) low++;unsorted[high] = unsorted[low];}unsorted[low] = pivot;return low;}

参考资料

维基百科http://en.wikipedia.org/wiki/Quicksort

转载于:https://www.cnblogs.com/jackbase/p/4272278.html

基础算法之快速排序Quick Sort相关推荐

  1. 【排序算法】快速排序(Quick Sort)

    快速排序(Quick Sort)使用分治法算法思想. 快速排序介绍 它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小. ...

  2. C语言快速排序 quick sort 算法(附完整源码)

    快速排序 quick sort 算法 快速排序 quick sort 算法的完整源码(定义,实现,main函数测试) 快速排序 quick sort 算法的完整源码(定义,实现,main函数测试) # ...

  3. Golang TDD实践报告:快速排序Quick Sort

    Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...

  4. 快速排序 Quick Sort

    快速排序 Quick Sort 我们已经知道,在决策树计算模型下,任何一个基于比较来确定两个元素相对位置的排序算法需要Ω(nlogn)计算时间.如果我们能设计一个需要O(n1ogn)时间的排序算法,则 ...

  5. Java实现快速排序 Quick Sort

    本文带来八大排序算法之快速排序算法. 快速排序(QuickSort)是对冒泡排序的一种改进.基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小, ...

  6. python实现快速排序算法_基础算法:快速排序(python实现)

    算法原理 快速排序是一个具有较高性能的排序算法,其主要思想如下: 对数组中的某个元素,确定其在数组中的排序位置,即在其之前的所有元素均小于该元素,在其之后的均大于该元素.对小元素组和大元素组同样执行该 ...

  7. 快速排序 (Quick Sort)(Java实现)

    快速排序(Quicksort)是对冒泡排序的一种改进,借用了分治的思想,由C. A. R. Hoare在1962年提出. 1.基本思想 快速排序的基本思想:挖坑填数+分治法. 首先选一个轴值(pivo ...

  8. 快速排序quick sort

    一.快速排序的基本思想: 1.在集合中找一个数作为基准数: 2.集合分为三部分:左分区.基准数.右分区,其中左分区的数都小于等于基准数,右分区的数都大于等于基准数: 3.分别对左分区.右分区执行第2步 ...

  9. C++ 算法基础课 01 —— 基础算法_快速排序/归并排序/二分查找/高精度

    文章目录 1 排序 1.1 快速排序(难在划分) 1.1.1 模板 1.1.2 习题1 -- 785.快速排序 1.1.3 习题2 -- 786.第k个数(快速选择算法) 1.2 归并排序(难在合并) ...

最新文章

  1. java list写入txt_Java - 如何将我的ArrayList写入文件,并将该文件读取(加载)到原始ArrayList?...
  2. 2020——网鼎杯 (青龙组)jocker
  3. 中国中医科学院院长黄璐琦发表2022年新春贺词
  4. 萝卜源码前后端源码 附打包APP的教程
  5. python的文件操作os_​Python:目录和文件的操作模块os.path
  6. 2019年 AI 顶会速递
  7. mysql的replication(主从同步)总结
  8. 分布式服务架构原理、设计
  9. C语言——链表简单介绍
  10. Hive 字符串转日期
  11. 江苏发展大会上有哪些科技界大佬,他们的“隐私”你知道多少?
  12. 前端工作第一天,准备事项,配置环境
  13. 旗舰杀手红米K20实拍图曝光:流光外壳美炸
  14. 个人简历模板下载 2020个人简历模板 下载空白简历个人简历
  15. 深入理解MQ生产端的底层通信过程-理解channel
  16. webpack:两小时极速入门
  17. Vegeta靶机打靶过程及思路
  18. 大数据框架复习-flink
  19. <Zhuuu_ZZ>HIVE(十一)函数
  20. 中值定理、不等式与零点问题

热门文章

  1. java中break内外循环_java 中break如何跳出外部循环
  2. pyplot 画多个图时搅合到了一起_聚镁Art0X丨马歇尔-他与他的黑人画
  3. php+数学计算公式,PHP数学计算函数总结
  4. 接口隔离原则_设计模式之七大设计原则(上)
  5. 单例模式应用场景_【简易设计模式04】单例模式
  6. Mysql Too many connections解决方法
  7. 常用的php函数,PHP常用函数整理(上)
  8. 实现弹出悬浮页面_30秒快速实现Excel每页标题行的打印!
  9. elasticsearch mapping之store
  10. Hive DML操作