06快速排序 O(nlogn) 不稳定
let nums = [1, 4, 2, 8, 7, 3, 5, 9]
const quickSort = (nums) => {
if (nums.length < 2) {
return nums;
} else {
var left = [];
var right = [];
var pivot = Math.floor(nums.length / 2); // Math.floor 向下取整
var base = nums.splice(pivot, 1)[0];
for (let i = 0; i < nums.length; i++) {
if (nums[i] < base) {
left.push(nums[i]);
} else {
right.push(nums[i]);
}
}
}
return quickSort(left).concat([base], quickSort(right));
}
console.log(quickSort(nums));
快速排序核心:将关键字较大的记录从前面移到都免,关键字较小的记录从后面直接移动到前面,从而减少了总的比较次数和移动次数。
原地快排
function quickSort(arr, i, j) { if (i < j) { let left = i; let right = j; let pivot = arr[left]; //备份基准值 while (i < j) { while (arr[j] >= pivot && i < j) { // 从后往前找比基准小的数 j--; } if (i < j) { arr[i++] = arr[j]; } while (arr[i] <= pivot && i < j) { // 从前往后找比基准大的数 i++; } if (i < j) { arr[j--] = arr[i]; } } arr[i] = pivot; quickSort(arr, left, i - 1); quickSort(arr, i + 1, right); return arr; } }

浙公网安备 33010602011771号