美文网首页
【JS编程系列】手写一个快速排序

【JS编程系列】手写一个快速排序

作者: 前端葱叶 | 来源:发表于2021-11-04 23:59 被阅读0次

一、题目

题目:手写一个快速排序

例子:

    输入:[1, 34, 5, 76, 8, 6, 9, 7, 6, 3]
    输出:[1, 3, 5, 6, 6, 7, 8, 9, 34, 76]

二、代码实现

“快速排序”思路:

  1. 在数组中,选择一个元素作为“基准”;
  2. 所有小于“基准”的元素,都移到“基准”左边;所有大于“基准”元素,都移到“基准“的右边;
  3. 对应“基准”左边和右边的两个子集,不断重复第一步和第二步,知道所有的子集只剩下一个元素为止;

代码实现:

      let testArr = [1, 34, 5, 76, 8, 6, 9, 7, 6, 3];
      
      var quickSort = function (arr) {
        // 检查数组的元素个数,如果小于等于1,就返回。
        if (arr.length <= 1) {
          return arr;
        }
        // 选择"基准"(pivot),并将其与原数组分离,再定义两个空数组,用来存放一左一右的两个子集。
        const pivotIndex = Math.floor(arr.length / 2); //Math.floor向下取整 45.11 => 45
        const pivot = arr.splice(pivotIndex, 1)[0];
        let left = [];
        let right = [];
        const len = arr.length;
        // 开始遍历数组,小于"基准"的元素放入左边的子集,大于基准的元素放入右边的子集。
        for (let i = 0; i < len; i++) {
          if (arr[i] < pivot) {
            left.push(arr[i]);
          } else {
            right.push(arr[i]);
          }
        }
        // 使用递归不断重复这个过程,就可以得到排序后的数组
        return quickSort(left).concat([pivot], quickSort(right));
      };
      
      var result = quickSort(testArr);
      console.log(result);// [1, 3, 5, 6, 6, 7, 8, 9, 34, 76]

相关文章

  • 【JS编程系列】手写一个快速排序

    一、题目 题目:手写一个快速排序 例子: 二、代码实现 “快速排序”思路: 在数组中,选择一个元素作为“基准”; ...

  • 【JS手写编程系列】手写一个冒泡排序

    一、题目 题目:手写一个冒泡排序 测试用例: 二、思路 依次比较相邻的两个数,如果不符合排序规则,则调换两个数的位...

  • 算法

    排序算法有哪些?最快的排序算法是哪个?手写一个冒泡排序手写快速排序代码快速排序的过程、时间复杂度、空间复杂度手写堆...

  • 算法

    排序算法有哪些? 最快的排序算法是哪个? 手写一个冒泡排序 手写快速排序代码 快速排序的过程、时间复杂度、空间复杂...

  • 手写算法

    1.手写快排 手写快速排序手写快速排序 2.手写二分查找 3.手写单链表反转 4.栈实现队列 5.寻找全排列的下一个数

  • 经典排序算法

    序 虽然在各种编程语言中都提供了快速排序的函数或方法,而且刷算法题时很少需要自己手写排序算法。排序算法都不是很难理...

  • 快速排序

    手写java版快速排序算法实现

  • 滴滴面试题

    1、快速排序和二分排序选一个手写。 2、手写一个 eventEmitter。 3、手写两个数组的交集。 两层 fo...

  • 面试常见算法题你会多少?

    罗列一下常见算法题 看看你会多少?后续会更新上解析 排序算法有哪些?最快的排序算法是哪个?手写一个冒泡排序手写快速...

  • 1.2-交换排序-快速排序

    参考链接 交换排序:快速排序(Quick Sort) 白话经典算法系列之六 快速排序 快速搞定 快速排序是C.R....

网友评论

      本文标题:【JS编程系列】手写一个快速排序

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