基础算法之快速排序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 ...
随机推荐
- 用 正则表达式 限定XML simpleType 定义
<xsd:simpleType name="ResTrictions"> <xsd:restriction base="xsd:string" ...
- js兼容性问题总结
JS中出现的兼容性问题的总结1.关于获取行外样式 currentStyle 和 getComputedStyle 出现的兼容性问题 我们都知道js通过style不可以获取行外样式,当我们需要获取行外 ...
- LabVIEW类方法浏览器-Class Method Browser
随着LabVIEW的类编程应用增多,当打开较多的VI进行编辑时候,添加该类对应的VI方法到程序后背板上操作显得繁琐(需要在Project浏览器或类浏览器或库浏览器中找到该类的方法VI,然后再拖到程序背 ...
- 《编写可维护的JavaScript》——JavaScript编码规范(四)
注释 单行注释 单行注释以两个斜线开始,以行尾结束 单行注释有三种使用方法: 独占一行的注释,用来解释下一行代码.这行注释前总是有一个空行,且缩进层级和下一行代码保持一致. 在行尾的注释.代码结束到注 ...
- ANGULAR JS WATCH监听使用(详)
ANGULAR 监听使用: 当angular数据模型发生变化时,我们需要如果需要根据他的变化触发其他的事件. $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. ...
- 2016ACM/ICPC亚洲区沈阳站-重现赛
C.Recursive sequence 求ans(x),ans(1)=a,ans(2)=b,ans(n)=ans(n-2)*2+ans(n-1)+n^4 如果直接就去解...很难,毕竟不是那种可以直 ...
- jquey与javascript相通运用查找(全)
1.addClass\removeClass\classList(js) jQ:$('#div').addClass('hover')=====document.getElementById('div ...
- 关于欧几里得算法求最大公约数,即OJ1029的参考解法
#include <stdio.h> int main(int argc, char *argv[]) { int a,b,c; scanf("%d %d",& ...
- widgets、dialogs与自动连接(auto-connect)
QMetaObject的自动连接设施(auto-connect facilities)可以自动将槽与信号连接起来,只需要声明和定义一个符合标准命名规则的槽函数 void on_<object n ...
- 28.zookeeper单机(Standalones模式)和集群搭建笔记
zookeeper单机(Standalones模式)和集群搭建: 前奏: (1).zookeeper也可以在windows下使用,和linux一样可以单机也可以集群,具体就是解压zookeeper-3 ...