经典快速排序中的partition, 将最后一个元素作为划分点。 维护两个区域。 <= x 的, >x 的区域。 划分过程中还有个待定的区域。
[L,less] 区域小于x, [less+1,cur) 区域大于x. [cur,R] 待定区域。
/* * 将数组中的数字, 小于等于num 的在左边, 大于num的在右边。 * num为 数组中的最后一个数。 */ public static int partion(int[] arr, int L, int R){ int less = L -1; int cur = L; while( cur < R ){ if( arr[cur] <= arr[R] ){ swap(arr, ++less, cur++); }else{ cur++; } } swap(arr, less+1, R); return less+1; }
swap 代码
quickSort代码;
public static void swap(int[] arr, int L, int R){ int tmp = arr[L]; arr[L] = arr[R]; arr[R] = tmp; }
public static void quickSort(int[] arr, int L, int R) { if( L < R ){ int p = partion(arr, L, R); quickSort(arr, L, p-1); quickSort(arr, p+1, R); } }