码迷,mamicode.com
首页 > 编程语言 > 详细

java实现快速排序

时间:2014-12-07 17:53:11      阅读:274      评论:0      收藏:0      [点我收藏+]

标签:java   实现   快速排序   改进   

快速排序对冒泡排序的一种改进,若初始记录序列按关键字有序或基本有序,蜕化为冒泡排序。

基本思想

通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

一趟排序过程如下:

bubuko.com,布布扣bubuko.com,布布扣

bubuko.com,布布扣

具体代码

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实现快速排序

标签:java   实现   快速排序   改进   

原文地址:http://blog.csdn.net/hwwn2009/article/details/41787623

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!