快速排序
第一种方法
// 使用JS API比较多,需要开辟额外的存储空间
function quickSort(arr) {
if(arr.length == 1) {
return arr
}
const temp = arr[0];
const left = [];
const right = [];
for(let i = 1; i < arr.length; i++) {
if (arr[i] <= temp) {
left.push(arr[i])
} else {
right.push(arr[i])
}
}
return quickSort(left).concat([temp], quickSort(right))
}
第二种方法
// 较难理解
function quickSort2(arr) {
// 交换
function swap(arr, i, k) {
let temp = arr[i];
arr[i] = arr[k];
arr[k] = temp;
}
function partition(arr, left, right) {
let storeIndex = left; // 准备交换的位置
let pivot = arr[right]; // 直接选最右边的元素为基准元素
for(let i = left; i < right; i++) {
if(arr[i] < pivot) {
swap(arr, storeIndex, i);
storeIndex++; // 交换位置后,storeIndex 自增 1,代表下一个可能要交换的位置
}
}
swap(arr, storeIndex, right); // 将基准元素放置到最后的正确位置上
return storeIndex;
}
function sort(arr, left, right) {
if(left > right) {
return;
}
let storeIndex = partition(arr, left, right);
sort(arr, left, storeIndex - 1);
sort(arr, storeIndex + 1, right);
}
sort(arr, 0, arr.length - 1);
return arr;
}