Quick Sort 重點在 partition 跟 recursively sort
還有一個重點,就是在做 partition 時,while 裡面的條件要 always start < end
public void quickSort(int[] nums) {
qsort(nums, 0, nums.length - 1);
}
public void qsort(int[] nums, int s, int e) {
if (e <= s) {
return;
}
int idx = partition(nums, s, e);
qsort(nums, s, idx - 1);
qsort(nums, idx + 1, e);
}
public int partition(int[] nums, int s, int e) {
int pivot = nums[s];
while (e > s) {
while (e > s && nums[e] > pivot) {
e--;
}
nums[s] = nums[e];
while (s < e && nums[s] < pivot) {
s++;
}
nums[e] = nums[s];
}
nums[s] = pivot;
return s;
}
O(nlogn), worse case O(n2)