一、简单快速排序
let arr = [4, 1, 6, 9, 3, 2, 8, 7];
function quickSort(arr) {
if(arr == null || arr.length == 0) return [];
let leader = arr[0];
let left = [];
let right = [];
for (let i = 1; i < arr.length; i ++) {
if(arr[i] < leader) left.push(arr[i]);
else right.push(arr[i]);
}
left = quickSort(left);
right = quickSort(right);
left.push(leader);
return left.concat(right);
}
console.log(quickSort(arr))
二、标准快速排序
let arr = [4, 1, 6, 9, 3, 2, 8, 7];
function swap(arr, a, b) {
let temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
function quickSort(arr, begin, end) {
if(begin >= end - 1) return false;
let left = begin;
let right = end;
do {
do left ++; while (left < right && arr[left] < arr[begin]);
do right --; while (left < right && arr[right] > arr[begin]);
if(left < right) swap(arr, left, right)
} while(left < right); // 直到left 比 right大停止循环
// 第一位和谁交换
let swapPoint = left == right ? right - 1 : right;
swap(arr, begin, swapPoint);
// 递归
quickSort(arr, begin, swapPoint)
quickSort(arr, swapPoint + 1, end)
}
quickSort(arr, 0, arr.length);
console.log(arr)
此时,比 4 小的连接到了一起,比 4 大的也都连到了一起,
得到的结果为: [4, 1, 2, 3, 9, 6, 8, 7];
再交换第一位的位置:
然后使用递归的思想,对左边的再进行排序 quickSort(arr, begin, swapPoint);
对右边的再次排序 quickSort(arr, swapPoint + 1, end);