快速排序法

 1 public static int adjustArray(int[] a, int first, int last){
 2         int i = first;
 3         int j = last;
 4         //取第一个数为基准数,也就是第一个坑
 5         int x = a[i];
 6         while (i < j){
 7             //从右向左找小于x的数来填坑
 8             //a[j]等于x或比x大则继续往左找
 9             while (i < j && a[j] >= x){
10                 j--;
11             }
12             //当找到a[j]比x小的数时,要先判断此时i是否小于j
13             //然后把a[j]填入a[i]中,此时a[j]成为新的坑
14             if (i < j){
15                 a[i] = a[j];
16                 i++;
17             }
18             //接着从左往右找大于等于x的数来填坑
19             //a[i]比x小则继续往右找
20             while (i < j && a[i] < x){
21                 i++;
22             }
23             //当找到a[i]大于等于x的数时,要先判断此时i是否小于j
24             //然后把a[i]填入a[j]中,此时a[i]成为新的坑
25             //然后这整个过程一直持续到i = j的时候退出
26             if (i < j){
27                 a[j] = a[i];
28                 j--;
29             }
30         }
31         //退出时,i = j,最后将x填到这个坑中
32         a[i] = x;
33         //返回的这个数为基准数最后落到的坑的位置,此时,基准数前面的数都比它小,后面的数都比他大
34         //接下来要做的事情,是对基准数左边的部分和右边的部分重复这个方法
35         return i;
36     }
37     
38     public static void quick_sort1(int[] a, int first, int last){
39         //刚开始肯定first比last小的,毕竟fisrt是0,last是a.length - 1;
40         if (first < last){
41             int i = adjustArray(a, first, last);
42             //然后不断递归对i位置左边的那部分和i位置右边那部分调用此方法
43             //直到调用不了为止,就排好序了
44             quick_sort1(a, first, i - 1);
45             quick_sort1(a, i + 1, last);
46         }
47     }
48     
49     //将以上两个方法合起来就是:
50     public static void quick_sort(int[] a, int first, int last){
51         if (first < last){
52             int i = first;
53             int j = last;
54             int x = a[i];
55             while (i < j){
56                 while (i < j && a[j] >= x){
57                     j--;
58                 }
59                 if (i < j){
60                     a[i] = a[j];
61                     i++;
62                 }
63                 while (i < j && a[i] < x){
64                     i++;
65                 }
66                 if (i < j){
67                     a[j] = a[i];
68                     j--;
69                 }
70             }
71             a[i] = x;
72             quick_sort1(a, first, i - 1);
73             quick_sort1(a, i + 1, last);
74         }
75     }

Written on October 16th, 2019

原文地址:https://www.cnblogs.com/LittleMike/p/11687112.html