快速排序算法QuickSort
来源:互联网 发布:淘宝小女卫衣的女装 编辑:程序博客网 时间:2024/04/30 19:21
1.说明
快速排序法(quicksort)是目前所公认最快的排序方法之一(视解题的对象而定),虽然快速排序法在最差状况下可以达O(n2),但是在多数的情况下,快速排序法的效率表现是相当不错的。
快速排序法的基本精神是在数列中找出适当的轴心,然后将数列一分为二,分别对左边与右边数列进行排序,而影响快速排序法效率的正是轴心的选择。
这边所介绍的第一个快速排序法版本,是在多数的教科书上所提及的版本,因为它最容易理解,也最符合轴心分割与左右进行排序的概念,适合对初学者进行讲解。
2.解法
这边所介绍的快速演算如下:
一趟快速排序的算法是:
- 设置两个变量start、end,排序开始的时候:start=1,end=N;
- 以第一个数组元素作为关键数据,赋值给pivot,即 pivot=arry[1];
- 从end开始向前搜索,即由后开始向前搜索(end--),找到第一个小于pivot的值arry[end],并与arry[start]交换,即swat(arry,start,end);
- 从start开始向后搜索,即由前开始向后搜索(start++),找到第一个大于pivot的arry[start],与arry[end]交换,即swat(arry,start,end);
- 重复第3、4步,直到 start==end,这个时候arry[start]=arry[end]=pivot,而pivot的位置就是其在整个数组中正确的位置;
- 通过递归,将问题规模不断分解。将pivot两边分成两个数组继续求新的pivot,最后解出问题。
3.代码实例
4.快速排序实例java版本(ps:2011-11-25)
思路和前面的一样,只是使用java来实现。
public class QuickSortTest1 {public static void main(String[] args) {// TODO Auto-generated method stubint arry[]={5,6,2,7,1};int len=arry.length;System.out.println("数组长度:"+arry.length);System.out.print("快速排序前数组元素为:");for(int i:arry){System.out.print(i+" ");}System.out.println();quickSort(arry,0,len-1);System.out.print("快速排序后数组元素为:");for(int i:arry){System.out.print(i+" ");}}//一次快速排序所执行的步骤public static int quickSortOnce(int []arry,int start,int end){int pivot=arry[start];//将首元素最为pivotwhile(start<end){//找到第一个大于pivot的arry[end]while(pivot<arry[end]&&start<end)end--;arry[start]=arry[end];//找到第一个小于pivot的arry[start]while(pivot>arry[start]&&start<end)start++;arry[end]=arry[start];}//最后start==end以后的位置就是起始pivot存放的位置arry[start]=pivot;//返回pivot的位置,后面按次位置分解return start;}public static void quickSort(int []arry,int start,int end){//判断start与end的位置if(start>=end)return;int pivot=quickSortOnce(arry,start,end);quickSort(arry,start,pivot-1);quickSort(arry,pivot+1,end);}}
- 快速排序算法QuickSort
- 快速排序算法QuickSort
- 快速排序(QuickSort)算法
- QuickSort 快速排序算法
- QuickSort算法(快速排序)
- 快速排序(quicksort)算法实现
- Algorithms Quicksort 快速排序算法
- 快速排序(quicksort)算法实现
- 【算法】快速排序法:Quicksort
- 快速排序算法(QuickSort)
- 细说算法-------快速排序QuickSort
- QuickSort 标准快速排序算法
- 算法导论-------快速排序QuickSort
- 算法/排序算法/QuickSort快速排序
- 算法-排序-快速排序(QuickSort)分析
- 排序算法 之 快速排序(quicksort)
- java排序算法_014快速排序(Quicksort)
- 排序算法笔记-快速排序 Quicksort
- [ZOJ1041] Transmitters
- 没有什么不可能
- Moto XT800(双卡手机)短信和电话服务的总结
- 常用的软件设计原则(汇总)
- 使用C#改写Peter Norvig的Spelling Corrector
- 快速排序算法QuickSort
- 成功安装ffmpeg
- li navigation menu
- Win7 下安装 Visual Studio 2008 失败的解决办法
- 三十而立
- Catlan数问题
- 让IE浏览器支持CSS3圆角属性的方法
- False Sharing问题
- 让tomcat支持中文文件名和路径