QUICK-SORT(p, r): if p < r: q = partition(p, r) QUICK-SORT(p, q - 1) QUICK-SORT(q + 1, r) // when calling QUICK-SORT first time, just pass 0 and array.length - 1 as parameters
partition(p, r): x = A[r] // 基準值pivot i = p - 1 for j from p to r-1(inclusive): if A[j] <= x: i = i + 1 exchange A[i] with A[j] exchange A[i + 1] with A[r] return i + 1
程式碼
let arr = [4, 1, 3, 2, 16, 9, 10, 14, 8, 7];
functionpartition(p, r){ let x = arr[r]; let i = p - 1; for (let index = p; index <= r - 1; index++) { if(arr[index] <= x){ i = i + 1; [arr[i], arr[index]] = [arr[index], arr[i]]; } } [arr[i + 1], arr[r]] = [arr[r], arr[i + 1]]; return i + 1; }
functionpartition(nums, p, r){ let x = nums[r]; let i = p - 1; functionswap(array, i, j) { var temp = array[i]; array[i] = array[j]; array[j] = temp; } for (let index = p; index <= r - 1; index++) { if(nums[index] <= x){ i = i + 1; swap(nums, index, i) } } swap(nums, r, i + 1) return i + 1; }
functionquickSort(nums, p = 0 , r = nums.length - 1){ if (p < r){ let q = partition(nums, p, r); quickSort(nums, p, q - 1); quickSort(nums, q + 1, r); } return nums }