算法导论-快速排序

import java.util.Random;

public class QuickSort {
	
	public static int partition (int a[],int left,int right){
		int flag=a[left];//以最左边即a[left]为标记数,这个可以随便选取
		while(left<right){
			
			while(left<right&&a[right]>=flag)
				right--;//右边比flag元素大的元素不动,把比flag小的元素移动到左边
			a[left]=a[right];//这里说明 右边的元素比flag小,所以把这个元素移动到左边,此时右边的right这个位置空出
			while(left<right&&a[left]<flag)
				left++;
			a[right]=a[left];//此时刚好把上面空出的right位置填补
		}
		a[left]=flag;//到最后还空出一个left位置,这里刚好用flag填补。
		return left;
	}
	
	public static void quickSort(int a [],int left,int right){
		int flag=0;
		if(left<right){
			flag=partition(a, left, right);
			quickSort(a, left, flag-1);
			quickSort(a, flag+1, right);
		}
	}
	
	public static void main(String args[]){
		long startTime=System.currentTimeMillis();
		int a[]=new int[2000];
		Random random=new Random();
		for(int i=0;i<a.length;i++){
			a[i]=random.nextInt(2000);
		}
		
		quickSort(a,0,a.length-1);
		for(int i=0 ;i<a.length;i++){
			System.out.print(a[i]+"\t");
		}
		long endTime=System.currentTimeMillis();
		
		System.out.println();
		System.out.println("total time: " + (endTime-startTime)+ " ms");
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值