基础算法之快速排序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 = { , , , , , };
Quick_Sort(intArray, , intArray.Length - ); 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 - );
Quick_Sort(unsorted, loc + , 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
基础算法之快速排序Quick Sort的更多相关文章
- Java中的经典算法之快速排序(Quick Sort)
Java中的经典算法之快速排序(Quick Sort) 快速排序的思想 基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对 ...
- 基础排序算法之快速排序(Quick Sort)
快速排序(Quick Sort)同样是使用了分治法的思想,相比于其他的排序方法,它所用到的空间更少,因为其可以实现原地排序.同时如果随机选取中心枢(pivot),它也是一个随机算法.最重要的是,快速排 ...
- [算法] 快速排序 Quick Sort
快速排序(Quick Sort)使用分治法策略. 它的基本思想是:选择一个基准数,通过一趟排序将要排序的数据分割成独立的两部分:其中一部分的所有数据都比另外一部分的所有数据都要小.然后,再按此方法对这 ...
- 经典排序算法 - 高速排序Quick sort
经典排序算法 - 高速排序Quick sort 原理,通过一趟扫描将要排序的数据切割成独立的两部分,当中一部分的全部数据都比另外一部分的全部数据都要小,然后再按此方法对这两部分数据分别进行高速排序,整 ...
- 快速排序Quick sort
快速排序Quick sort 原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归 ...
- 排序算法 - 快速排序(Quick Sort)
算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). (1) 分治法的基本思想 ...
- 快速排序算法回顾 --冒泡排序Bubble Sort和快速排序Quick Sort(Python实现)
冒泡排序的过程是首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换,然后比较第二个记录和第三个记录的关键字.以此类推,直至第n-1个记录和第n个记录的关键字进行过比较为止 ...
- 交互设计算法基础(3) - Quick Sort
int pivotIndex, pivot, swapIndex; void swap(int[] arr, int x, int y) { int temp = arr[x]; arr[x] = a ...
- java基础算法之快速排序
快速排序(Quicksort)是对冒泡排序的一种改进.在大学学过之后现在基本忘了,最近在好多地方都看到说快速排序在面试会问到,于是自己也准备重新拾起以前忘记的东西来,慢慢的积累自己的基础知识.figh ...
随机推荐
- arm 2440 linux 应用程序 nes 红白机模拟器 第1篇
对比了很多种,开源的 NES 模拟器 VirtuaNES , nestopia , FakeNES , FCEUX , InfoNES , LiteNES 最后决定使用 LiteNES 进行移值,它是 ...
- Weblogic的架构
WebLogic管理控制台 WebLogic服务器提供了一个健壮的基于Web 的工具——管理控制台,它是执行上述任务的主要工具.通过管理控制台,你可以访问WebLogic管理服务.管理服务实现了 S ...
- ODBC简介
加载驱动 1 oracle Class.forName("oracle.JDBC.driver.OracleDriver") 2 DB2 Class.forName("c ...
- “You couldn’t see my tears cause I am in the water.“ Fish said to water.“But I could feel your tears cause you are in my heart..“ Answered water.
“You couldn’t see my tears cause I am in the water.“ Fish said to water.“But I could feel your tears ...
- js图片左右旋转
图片显示 <p> <a href="images/example2.jpg" rel="lightbox-group" title=" ...
- 在jquery的ajax中添加自定义的header信息
转自网络 1 $.ajax({ type: "POST", url: "http://192.168.0.88/action.cgi?ActionID=WEB_Reque ...
- zigbee学习之路(十一):看门狗
一.前言 今天,我们要通过实验学习和认识一下看门狗的使用,看门狗是为了防止防止程序跑飞的,通过不断的喂狗,使看门狗能持续监管程序的运行状态,当程序跑飞时,能及时把程序拽回来. 二.原理与分析 在CPU ...
- CSS ::before 和 ::after 伪元素另类用法
原文地址:http://justcoding.iteye.com/blog/2032627 CSS 有两个说不上常用的伪类 :before 和 :after,偶尔会被人用来添加些自定义格式什么的,但是 ...
- (转)深入浅出 妙用Javascript中apply、call、bind
原文连接 深入浅出 妙用Javascript中apply.call.bind 网上文章虽多,大多复制粘贴,且晦涩难懂,我希望能够通过这篇文章,能够清晰的提升对apply.call.bind的认识,并且 ...
- Unity手撸2048小游戏——模块拆分
最近惹女票生气了,想起撸个游戏来哄哄她,加之以前在小恩爱App上,玩过那情侣版的2048,加之她喜欢玩这类益智类的游戏,打算撸一个3D的情侣版2048.不过之前没怎么独立做过游戏,就从2D的开始吧. ...