快速排序原理

速排基础
在要排的数(比如数组A)中选择一个中心值key,通过一次排序将数组A分成两部分,其中以key值为中心,key值右边都比key值大,key值左边的都key值小,然后对这两部分分别重复这个过程,直到整个有序,然后使用递归调用即可。

 

排序过程如下:

我们以数组{70,60,40,67,45,76,49,77},选择第一个元素30为基准值。

初始排序为[30,60,40,67,45,76,49,77]。

第一趟排序过程如下:

[70,60,40,67,45,76,49,77]

[70,60,40,67,45,76,49,77]

[49,60,40,67,45,76,70,77]

[49,60,40,67,45,76,70,77]

[49,60,40,67,45,76,70,77]

[49,60,40,67,45,76,70,77]

[49,60,40,67,45,70,76,77]

第一趟排序后:

[49,60,40,67,45]70[76,77]

第二趟排序过程:

[49,60,40,67,45]70[76,77]

[45,60,40,67,49]70[76,77]

[45,49,40,67,60]70[76,77]

[45,49,40,67,60]70[76,77]

[45,40,49,67,60]70[76,77]

第二趟排序后:

[45,40]49[67,60]70[76,77]

第三趟排序过程:

[45,40]49[67,60]70[76,77]

[40,45]49[60,67]70[76,77]

第三趟排序后:

[40,45,49,60,67,70,76,77]

最后结果为:

40,45,49,60,67,70,76,77


代码表示如下:



public class z {
public static void Sort(int a[],int z,int x) {
	int i,j,index;
	if (z>x) {
		return;
	}
	i=z;
	j=x;
	index=a[i];// 用子表的第一个记录做基准值
	while(i<j) {// 从表的两端交替向中间扫描
		while(i<j && a[j] >=index)
			j--;
		if(i<j)
			a[i++]=a[j];// 用比基准小的记录替换低位记录
		while(i<j && a[i] <index)
			i++;
		if(i<j)
			a[j--]=a[i];// 用比基准大的记录替换高位记录
	}
	a[i]=index;// 将基准数值替换回 a[i]
	Sort(a, z, i-1);// 对低子表进行递归排序
	Sort(a, i+1, x);// 对高子表进行递归排序
}
public static void zsort(int a[]) {
	Sort(a, 0, a.length-1);
}
public static void main(String[] args) {
	int a[]= {43,31,35,75,13,54,77,};
	zsort(a);
	System.out.println(Arrays.toString(a));
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值