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 }