美文网首页
排序【4】— 快速排序

排序【4】— 快速排序

作者: 弱冠而不立 | 来源:发表于2020-11-18 12:12 被阅读0次

快速排序的思路:

思路1:选择一个基准值(随意),然后比基准值小的,推入左边,比基准值大的推入右侧

    Array.prototype.quickSort = function () {
        // 定义递归出口
        if (this.length <= 1) {
            return this;
        }
        let target = this[0]
        let left = []
        let right = []
        for (let i = 1; i < this.length; i++) {
            // 如果比基准数大就推入左数组
            if (this[i] < target) {
                left.push(this[i])
            // 否则就推入右数组
            } else {
                right.push(this[i])
            }
        }
        // 采用递归方式, 继续对左右数组进行排序操作
        return [...left.quickSort(), target, ...right.quickSort()]
    }

思路2:
选择一个基准值,从右边开始找比基准值小的,再从左边找比基准值大的,交换这两个元素。这样循环下来,直到左边和右边相遇,相遇了之后将基准值和相遇点交换。则此时基准值左侧都小于基准值,基准值右侧都大于基准值。然后再递归排序基准值左边和右边的元素。

Array.prototype.quickSort = function (start=0, end=this.length-1) {
    //定义递归出口
    if(end - start < 1) {
        return;
    }
    // 选定基准值
    const target = start;
    // 开始从左右两边往中间查找
    let left = start;
    let right = end;
    // 左右相遇则证明整理完毕
    while(left<right) {
        // 在右边找比基准值小的
        while(left<right && this[right] >= this[target]) {
            right--;
        }
        // 在左边找比基准值大的元素
        while(left<right && this[left] <= this[target]) {
            left++;
        }
        
        // 交换位置
        [this[left], this[right]] = [this[right], this[left]];
    }
    // 收敛到中间后,和基准值交换位置,此时基准值左边都比基准值小,右边都比基准值大
    [this[left], this[target]] = [this[target], this[left]];
    // 继续对左右两边进行排序
    this.quickSort(start, left-1)
    this.quickSort(left+1, end);
}

相关文章

  • 排序

    1、选择排序 2、冒泡排序 3、插入排序 4、快速排序

  • 排序算法

    1冒泡排序 2插入排序 3选择排序 4快速排序

  • 常见排序算法

    1、冒泡排序 2、插入排序 3、选择排序 4、快速排序 5、堆排序

  • android 随笔之排序算法

    1,冒泡排序(1) 冒泡排序(2) 2,选择排序 3,插入排序 4,快速排序

  • 排序

    1 冒泡排序 2 选择排序 3 插入排序 4 归并排序 5 快速排序 6 堆排序

  • 排序算法

    1、冒泡排序 2、选择排序 3、插入排序 4、希尔排序 5、堆排序 6、归并排序 7、快速排序

  • 排序算法----常见的排序算法

    1.冒泡排序 2.简单选择排序 3.直接插入排序 4.快速排序 快速排序 5.堆排序 堆排序 6.希尔排序 希尔排...

  • PHP的四种基本排序整理

    1. 冒泡排序 2. 选择排序 3. 快速排序 4. 插入排序

  • Java常用算法

    1.冒泡排序 2.插入排序 3.选择排序 4.快速排序

  • 前端需要了解的排序算法

    1.冒泡排序 2.插入排序 3.快速排序 4.选择排序

网友评论

      本文标题:排序【4】— 快速排序

      本文链接:https://www.haomeiwen.com/subject/otwxiktx.html