function swap(arr, i, j) {
let tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
function findPivot(arr, start, end) {
const len = end - start
let mid = start + (len >> 1)
let min = start
let max = end - 1
if (arr[min] > arr[mid]) {
let temp = min
min = mid;
mid = temp
}
if (arr[mid] > arr[max]) {
let temp = mid
mid = max
max = temp
}
if (arr[min] > arr[mid]) {
let temp = min
min = mid
mid = temp
}
return mid
}
function partition(arr, left, right, pivotPos) {
let i = left,
j = right;
let mid = findPivot(
arr,
left,
right
);
swap(arr, left, mid);
while (i < j) {
while (i < j && arr[j] >= arr[left]) {
j -= 1;
}
while (i < j && arr[i] <= arr[left]) {
i += 1;
}
swap(arr, i, j);
}
swap(arr, i, left);
return i;
}
function quickSort(arr, left, right) {
if (left >= right) return;
const pivot = partition(arr, left, right);
quickSort(arr, left, pivot - 1);
quickSort(arr, pivot + 1, right);
return arr
}
const arr = [9, 8, 7, 6, 5, 4, 2, 1]
const arr2 = [9, 8, 5, 4, 2, 1, 7, 6]
const arr3 = [2, 1, 9, 8, 5, 4, 7, 6]
console.log(quickSort(arr, 0, arr.length - 1))
console.log(quickSort(arr2, 0, arr2.length - 1))
console.log(quickSort(arr3, 0, arr3.length - 1))