首页 > 代码库 > java实现快速排序
java实现快速排序
快速排序对冒泡排序的一种改进,若初始记录序列按关键字有序或基本有序,蜕化为冒泡排序。
基本思想
通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
一趟排序过程如下:
具体代码
public class QuickSort { public static void main(String[] args) { // TODO Auto-generated method stub int[] list = {4,6,1,7,9,10,2,56,24,0,3}; QuickSort qs = new QuickSort(); qs.quickSort(list, 0, list.length-1); for(int i=0; i<list.length; i++){ System.out.print(list[i]+" "); } } public void quickSort(int[] list, int low, int high){ if(low < high){ int middle = getMiddle(list, low, high); quickSort(list, low, middle-1); quickSort(list, middle+1, high); } } public int getMiddle(int[] list ,int low, int high){ int tmp = list[low];//选择第一个数为枢轴 while(low < high){//使用一个索引由后往前遍历整个序列 while(low < high && list[high] > tmp){ high--; } list[low] = list[high]; while(low < high && list[low] < tmp){ low++; } list[high] = list[low]; } list[low] = tmp; return low; } }性能分析
在所有同数量级O(nlongn) 的排序方法中,其平均性能最好。就平均时间而言,是目前被认为最好的一种内部排序方法。
改进
枢轴选择
枢轴选择好坏直接影响快速排序的性能,最坏的情况是划分产生两个极端不对称的子序列(一个长度为1,另一个长度为n-1),此时复杂度为O(n*n)。可以选择首尾和中间元素中的中位数为枢轴,减小划分不对称的可能性。
java实现快速排序
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。