简单的快速排序



看了[啊哈!算法]之后,在网上找了一下,没发现能简单理解的快速排序的java程序(可能是我渣).....

在书上的算法步骤是:

假设获得一个数组,需要对它排序。

1;首先把数组左边界(什么是左边界)第一个数作为基准数。

2;然后从数组尾部开始,判断最后一个数是否大于或等于基准数,是的话就往前走(下标减一)再比较,直到找到第一个比基准数小的数。

3;接着,从数组头部开始,判断第一个数是否小于或等于基准数,是的话就往后走(下标加一)再比较。直到找到第一个比基准数大的数。

4;把这两个找到的数互换位置。

5:继续找,继续互换。直到后面判断的位置和前面判断的位置重叠,这时候把重叠位置的数与基准数互换位置。

6:递归上述过程。

public class Main{
	public static void main(String args[]){
		int []a = new int[100];
		for(int i=0;i<100;i++){
			a[i] = (int)(10000*Math.random());
		}	
		quicksort(a,0,a.length-1);  //排序。
			/*for(int q=0;q<a.length-1;q++){     //用来验证是否是从小到大排列
				if(a[q]>a[q+1]){
					System.out.print(false);
				break ;
				}
			}*/
	}
	static void quicksort(int []a,int left, int right){
		int i,j,t,temp;
		if(left > right)
			return;
		temp = a[left];
		i=left;
		j = right;
		while(i<j){
			while(a[j]>=temp && i <j)
				j--;
			while(a[i]<=temp && i<j)
				i++;
			if(i<j){      //  把两个找到的数调换位置。
				t=a[i];
				a[i]=a[j];
				a[j]=t;
			}
		}
		a[left]=a[i];      //因为temp早已经赋值成a[left],所以这三句就相当于a[left]和a[i]互换位置。
		a[i]=temp;
		quicksort(a,left,i-1);   // 从基准数为中心,左边递归,右边递归,所以时间复杂度 Nlog2(N)
		quicksort(a,i+1,right);
	}
}



可能有理解错的地方,欢迎指出..
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值