速排基础:
在要排的数(比如数组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));
}
}