14.4:快排2.0 O(N2)

14.4:快排2.0

 

[        .....         X]       利用数组的最后一个数X作为目标数

将数组划分成:

[  <X    ==X   >X    X]

只需要将最后X和>X区域的第一数交换,X就来到了==X区域

[  <X    ==X X  >X ]  此时==X的位置固定下来,不用变了。

通过递归:

处理[ <x ]区域

处理[ >x ]区域 

 1     public static void quickSort2(int[] arr) {
 2         if (arr == null || arr.length < 2) {
 3             return;
 4         }
 5         process2(arr, 0, arr.length - 1);
 6     }
 7 
 8     // arr[L...R] 排有序,快排2.0方式
 9     public static void process2(int[] arr, int L, int R) {
10         if (L >= R) {
11             return;
12         }
13         // [ equalArea[0]  ,  equalArea[0]]
14         int[] equalArea = netherlandsFlag(arr, L, R);
15         process2(arr, L, equalArea[0] - 1);
16         process2(arr, equalArea[1] + 1, R);
17     }

 

 

 

 

 

posted @ 2022-05-22 11:54  yzmarcus  阅读(24)  评论(0编辑  收藏  举报