1. 程式人生 > 其它 >14.5:真正意義上的快排3.0:隨機快排

14.5:真正意義上的快排3.0:隨機快排

14.5:真正意義上的快排:隨機快排

[        ....?...         X]      隨機從陣列中選一個數和最右側的數進行交換,

[        ....X...         ?]      拿這個?數作為目標數

將陣列劃分成:

[  <?    ==?   >?    ?]

只需要將最後?和>?區域的第一數交換,?就來到了==?區域

[  <?    ==? ?  >? ]  此時==?的位置固定下來,不用變了。

通過遞迴:

處理[ <? ]區域

處理[ >? ]區域 

 1 public static void
quickSort3(int[] arr) { 2 if (arr == null || arr.length < 2) { 3 return; 4 } 5 process3(arr, 0, arr.length - 1); 6 } 7 8 public static void process3(int[] arr, int L, int R) { 9 if (L >= R) { 10 return; 11 } 12 swap(arr, L + (int
) (Math.random() * (R - L + 1)), R); 13 int[] equalArea = netherlandsFlag(arr, L, R); 14 process3(arr, L, equalArea[0] - 1); 15 process3(arr, equalArea[1] + 1, R); 16 }