java实现快速排序算法

1.快速排序算法的思想

快速排序是应用很广泛的排序算法。主要原因是它实现简单、适用于各种不同的输入数据且在一般应用中比其他排序算法都要快得多。快速排序主要思想就是当两个子数组都有序时整个数组也就自然有序了。而这个过程就是先选出一个基准数,一般都选第一个,然后基准数的左边都是小于基准数的,基准数的右边都是大于基准数的。然后以基准数为基准,切分出两个数组arr1和arr2。arr1中的数一定小于arr2的数。然后以此类推找基准数,排序,拆分数组这三个步骤进行下去。最后拆分到只有一个数时将不拆分了。

如图为快算排序算法的执行过程:












2.快速排序算法的特点

快速排序算法是一个原地排序(只需要一个很小的辅助栈)

长度为N的数组排序所需时间和N*lgN成正比。

缺点是非常脆弱,在实现时要非常小心才能避免低劣的性能。

3.快速排序算法的实现

主要是排序、切分两个过程。然后应当注意切分时下标是否越界,终止循环的条件、以及终止递归的条件等。

public class QuickSort {
	//递归排序
	private static void inputSort(double[] arr, int start, int end){
		if(end<=start){
			return;
		}
		int standrad=partition(arr, start, end);
		inputSort(arr, start, standrad-1);
		inputSort(arr, standrad+1, end);
	} 
	//切分
	private static int partition(double[] arr, int start,int end){
		int i=start,j=end+1;
		double v=arr[start];
		while(i<j){
			//防止下标越界
			while(arr[++i]<v){
				if(i==end){
					break;
				}
			}
			while(v<arr[--j]){
				if(j==start){
					break;
				}
			}
			if(i>=j){
				break;
			}
			if(arr[i]>arr[j]){
				double temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
			}
		}
		if(arr[start]>arr[j]){
			double temp=arr[start];
			arr[start]=arr[j];
			arr[j]=temp;
		}
		return j;
	}
	public static void sort(double[] arr){
		inputSort(arr, 0, arr.length-1);
	}
	public static void main(String[] args) {
		double[] arr={3,8,9,32,2,20,1,4,7,5,5};
		sort(arr);
		for(int i=0;i<arr.length;i++){
			System.out.print(arr[i]+"  ");
		}
	}
}
结果:





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值