基础算法之快速排序Quick Sort
原理
快速排序(Quicksort)是对冒泡排序的一种改进。
- 从数列中挑出一个元素,称为"基准"(pivot);
- 排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在本次排序退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;
- 递归地(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相关推荐
- 【排序算法】快速排序(Quick Sort)
快速排序(Quick Sort)使用分治法算法思想. 快速排序介绍 它的基本思想是: 选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小. ...
- C语言快速排序 quick sort 算法(附完整源码)
快速排序 quick sort 算法 快速排序 quick sort 算法的完整源码(定义,实现,main函数测试) 快速排序 quick sort 算法的完整源码(定义,实现,main函数测试) # ...
- Golang TDD实践报告:快速排序Quick Sort
Golang TDD实践报告:快速排序Quick Sort [阅读时间:约5分钟] 0.项目需求 1.编写符合项目输入输出的一个测试 2.尝试运行测试 3.先使用最少的代码来让失败的测试先跑起来 4. ...
- 快速排序 Quick Sort
快速排序 Quick Sort 我们已经知道,在决策树计算模型下,任何一个基于比较来确定两个元素相对位置的排序算法需要Ω(nlogn)计算时间.如果我们能设计一个需要O(n1ogn)时间的排序算法,则 ...
- Java实现快速排序 Quick Sort
本文带来八大排序算法之快速排序算法. 快速排序(QuickSort)是对冒泡排序的一种改进.基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据都要小, ...
- python实现快速排序算法_基础算法:快速排序(python实现)
算法原理 快速排序是一个具有较高性能的排序算法,其主要思想如下: 对数组中的某个元素,确定其在数组中的排序位置,即在其之前的所有元素均小于该元素,在其之后的均大于该元素.对小元素组和大元素组同样执行该 ...
- 快速排序 (Quick Sort)(Java实现)
快速排序(Quicksort)是对冒泡排序的一种改进,借用了分治的思想,由C. A. R. Hoare在1962年提出. 1.基本思想 快速排序的基本思想:挖坑填数+分治法. 首先选一个轴值(pivo ...
- 快速排序quick sort
一.快速排序的基本思想: 1.在集合中找一个数作为基准数: 2.集合分为三部分:左分区.基准数.右分区,其中左分区的数都小于等于基准数,右分区的数都大于等于基准数: 3.分别对左分区.右分区执行第2步 ...
- C++ 算法基础课 01 —— 基础算法_快速排序/归并排序/二分查找/高精度
文章目录 1 排序 1.1 快速排序(难在划分) 1.1.1 模板 1.1.2 习题1 -- 785.快速排序 1.1.3 习题2 -- 786.第k个数(快速选择算法) 1.2 归并排序(难在合并) ...
最新文章
- java list写入txt_Java - 如何将我的ArrayList写入文件,并将该文件读取(加载)到原始ArrayList?...
- 2020——网鼎杯 (青龙组)jocker
- 中国中医科学院院长黄璐琦发表2022年新春贺词
- 萝卜源码前后端源码 附打包APP的教程
- python的文件操作os_​Python:目录和文件的操作模块os.path
- 2019年 AI 顶会速递
- mysql的replication(主从同步)总结
- 分布式服务架构原理、设计
- C语言——链表简单介绍
- Hive 字符串转日期
- 江苏发展大会上有哪些科技界大佬,他们的“隐私”你知道多少?
- 前端工作第一天,准备事项,配置环境
- 旗舰杀手红米K20实拍图曝光:流光外壳美炸
- 个人简历模板下载 2020个人简历模板 下载空白简历个人简历
- 深入理解MQ生产端的底层通信过程-理解channel
- webpack:两小时极速入门
- Vegeta靶机打靶过程及思路
- 大数据框架复习-flink
- <Zhuuu_ZZ>HIVE(十一)函数
- 中值定理、不等式与零点问题
热门文章
- java中break内外循环_java 中break如何跳出外部循环
- pyplot 画多个图时搅合到了一起_聚镁Art0X丨马歇尔-他与他的黑人画
- php+数学计算公式,PHP数学计算函数总结
- 接口隔离原则_设计模式之七大设计原则(上)
- 单例模式应用场景_【简易设计模式04】单例模式
- Mysql Too many connections解决方法
- 常用的php函数,PHP常用函数整理(上)
- 实现弹出悬浮页面_30秒快速实现Excel每页标题行的打印!
- elasticsearch mapping之store
- Hive DML操作