一,概念
快速排序是一种划分交换排序。它采用了一种分治的策略,通常称其为分治法。
分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
二,实现步骤
1,在数组中选择一个元素,这个元素被称为基准(Pivot
)。通常把数组中的第一个或最后一个元素作为基准,本文示例中,使用最后一个元素做为基准。
2,设置指针,指向当前数组的第一位。
3,循环分区,利用指针移动比较,找到比指针小的数就将指针向右移动一个位置,同时与下标i
交换位置。
4,递归左右数组。
三,代码实现
function sort(list) {
quickSort(list, 0, list.length - 1);
}
function quickSort(arr, start, end) {
if (start >= end) {
return;
}
// 获取基准值
let index = position(arr, start, end);
quickSort(arr, start, index - 1);
quickSort(arr, index + 1, end);
}
// 设置基准值
function position(arr, start, end) {
// 基准值
let val = arr[end];
let index = start;
for (let i = start; i < end; i++) {
if (arr[i] < val) {
[arr[i], arr[index]] = [arr[index], arr[i]];
index++;
}
}
[arr[index], arr[end]] = [arr[end], arr[index]]
return index;
}
let arr = [9,5,1,2,10,0];
arr.sort();
console.log(arr);
四,js
数组原型实现
Array.prototype.sort = function sort() {
console.log('---------',this);
quickSort(this, 0, this.length - 1);
};
tip:
this
为当前数组,实现[3,4,1,2].sort()调用;
五,扩展阅读