privateintpartition(int[] nums, int left, int right) { intpivotIndex= left + ThreadLocalRandom.current().nextInt(right - left + 1); intpivotValue= nums[pivotIndex]; swap(nums, left, pivotIndex);
intindex= left; for (inti= left + 1; i <= right; i++) { if (lessThan(nums[i], pivotValue)) { swap(nums, i, ++index); } }
swap(nums, left, index); return index; }
privatebooleanlessThan(int x, int y) { // xy < yx longtmp=10; while (tmp <= y) { tmp *= 10; } longa= x * tmp + y;
tmp = 10; while (tmp <= x) { tmp *= 10; } longb= y * tmp + x;
return a < b; }
privatevoidswap(int[] nums, int i, int j) { inttmp= nums[i]; nums[i] = nums[j]; nums[j] = tmp; } }