思路分析
// 三项切分的快速排序
private static void quick3way(int[] a, int lo, int hi) {
if(hi <= lo)
return;
int lt = lo, i = lo+1, gt = hi;
int v = a[lo];
while(i <= gt) {
if(a[i] < v) {
int tmp = a[i];
a[i++] = a[lt];
a[lt++] = tmp;
} else if(a[i] > v) {
int tmp = a[i];
a[i] = a[gt];
a[gt--] = tmp;
} else i++;
}
quick3way(a, lo, lt-1);
quick3way(a, gt+1, hi);
}
我本题的代码如下
public void sortColors(int[] nums) {
if (nums == null)return;
quick3way(nums,0,nums.length-1);
// System.out.println(Arrays.toString(nums));
}
private void quick3way(int[] nums, int lo, int hi) {
if (hi<=lo) return ;
int lt=lo;
int gt = hi;
int i=lo;
int v = 1;
while (i <= gt) {
if (nums[i] < v) {
if (i == lt) {
lt++;
i++;
} else {
int tmp = nums[i];
nums[i] = nums[lt];
nums[lt++] = tmp;
}
} else if (nums[i] > v) {
int tmp = nums[i];
nums[i] = nums[gt];
nums[gt--] = tmp;
} else i++;
}
}
原文:https://www.cnblogs.com/duduwy/p/13413671.html