您的位置:首页 > 其它

快速排序小结

2017-07-23 19:53 169 查看
       定义:快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(nlogn)次比较。事实上,快速排序通常明显比其他Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来,并且在大部分真实世界的数据,可以决定设计的选择,减少所需时间的二次方项之可能性。快速排序,通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,然后分别对这两部分记录继续进行排序,以达到整个序列有序的目的。

看下列的图片形象的感知一下快速排序的操作。(这个图是从别的地方看到的,感觉很形象就借用了。)




        代码实践:接下来就是代码级别的了。

package com.bjpowernode.struts;

import java.util.ArrayList;

/**
* Created by lenovo on 2017/7/23.
*/
public class 快速排序 {
public static int QuickPartition(int [] R, int low, int high){
int base=R[low];
while(low<high){
//从右向左开始找,
while ((low<high) && (R[high]>=base))
//循环体
high--;
R[low]=R[high];

while((low<high) && (R[low]<=base))
//循环体
low++;
R[high]=R[low];

}
R[low]=base;

return low;
}
//完整的快速排序使用递归
public static int[] QuickSort(int [] R,int low,int high){
int temp=QuickPartition(R,low,high);
QuickPartition(R,low,temp-1);
QuickPartition(R,temp+1,high);
return R;

}
public static int[] sort(int[] array) {
return QuickSort(array, 0, array.length - 1);
}
//测试
public static void main(String[] args) {
int [] a={45,38,66,90,88,10,25,46};
QuickSort(a,0, 7);
System.out.println("最终结果");
int [] sorted= sort(a);
for (int i : sorted) {
System.out.print(i + " ");
}
}
}
        在这个过程中遇到了一个小小的问题,想起来都是自己给自己挖的坑,见过坑别人的,还是头一次看见坑自己的。
        时间复杂度的衡量:

        最好的nlog2n,最差的时候就直接是n的平方了。

        以上就是个人对快速排序的一个简单的小结,欢迎走过路过的博友们拍砖。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: