快速排序
0 | 1 | 2 | 3 | 4 |
|
20 | 16 | 5 | 40 | 22 | 1.把低位设置为基准数 |
基准数20 |
|
|
|
| 循环执行条件是低位小于高位,低位为0,高位为4 |
20 | 16 | 5 | 40 | 22 | 从高位往低位找,若找到比基准数小的数,值赋给低位 |
20 | 16 | 5 | 40 | 22 |
|
20 | 16 | 5 | 40 | 22 |
|
5 | 16 | 5 | 40 | 22 | 交换完成后从低位开始找,若找到比基准数大的值,值赋给高位 |
5 | 16 | 5 | 40 | 22 |
|
5 | 16 | 5 | 40 | 22 | 此时低位等于高位,结束循环,此时低位指向数组的2下标 |
5 | 16 | 20 | 40 | 22 | 把基准数给低位 |
基准数5 |
|
|
|
|
|
5 | 16 | 20 | 40 | 22 | 递归调用自己,从数组起始位的位置到低位下标结束,执行条件还是低位小于高位,从高位往低位找,若找到比基准数小的数,值赋给低位 |
5 | 16 | 20 | 40 | 22 |
|
5 | 16 | 20 | 40 | 22 | 此时低位等于高位,结束循环,此时低位指向数组的0下标 |
5 | 16 | 20 | 40 | 22 | 把基准数给低位 |
基准数16 |
|
|
|
|
|
5 | 16 | 20 | 40 | 22 | 递归调用自己,从数组低位+1的位置到高位下标结束,执行条件是低位小于高位,从高位往低位找,若找到比基准数小的数,值赋给低位 |
5 | 16 | 20 | 40 | 22 |
|
5 | 16 | 20 | 40 | 22 |
|
5 | 16 | 20 | 40 | 22 | 此时低位等于高位,结束循环,此时低位指向数组的1下标 |
5 | 16 | 20 | 40 | 22 | 把基准数给低位 |
|
|
|
|
|
|
基准数20 |
|
|
|
|
|
5 | 16 | 20 | 40 | 22 | 递归调用自己,从数组低位+1的位置到高位下标结束,执行条件是低位小于高位,从高位往低位找,若找到比基准数小的数,值赋给低位 |
5 | 16 | 20 | 40 | 22 |
|
5 | 16 | 20 | 40 | 22 | 此时低位等于高位,结束循环,此时低位指向数组的2下标 |
5 | 16 | 20 | 40 | 22 | 把基准数给低位 |
基准数40 |
|
|
|
|
|
5 | 16 | 20 | 40 | 22 | 递归调用自己,从数组低位+1的位置到高位下标结束,执行条件是低位小于高位,从高位往低位找,若找到比基准数小的数,值赋给低位 |
5 | 16 | 20 | 22 | 22 |
|
5 | 16 | 20 | 22 | 22 | 此时低位等于高位,结束循环,此时低位指向数组的4下标 |
5 | 16 | 20 | 22 | 40 | 把基准数给低位 |
public static void main(String args[]) {
int[] arr = { 20, 16, 5, 40, 22 };
sortA(arr, 0, arr.length - 1);
for (int i : arr) {
System.out.print(i + ",");
}
}
public static void sortA(int[] array, int low, int high) {
if (low < high) {
int lowIndex = low;
int higIndex = high;
int num = array[lowIndex];
while (lowIndex < higIndex) {
while (lowIndex < higIndex && array[higIndex] >= num) {
higIndex--;
}
if (lowIndex < higIndex) {
array[lowIndex] = array[higIndex];
}
while (lowIndex < higIndex && array[lowIndex] <= num) {
lowIndex++;
}
if (lowIndex < higIndex) {
array[higIndex] = array[lowIndex];
}
}
array[lowIndex] = num;
System.out.println(lowIndex);
sortA(array, low, lowIndex - 1);
sortA(array, lowIndex + 1, high);
}
}