js 快速排序简单实现

91 阅读1分钟

一,概念

快速排序是一种划分交换排序。它采用了一种分治的策略,通常称其为分治法。

分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。

二,实现步骤

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()调用;

五,扩展阅读

js sort原理参考: