快速排序

快速排序

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);

}

}

   

posted @ 2017-04-17 15:35  LuBoom  阅读(160)  评论(0编辑  收藏  举报