zoukankan      html  css  js  c++  java
  • js数组排序算法 快速排序法

    原理:

    判断元素个数,若元素为空或只有1个元素,则无需排序。

    否则就将第一个元素作为基准值,将数组拆分为2个数组,一个大于基准值的,一个小于基准值的。

    利用递归算法,继续将上面的2个数组分别继续执行,即可得到全部排序过的新数组。

    快速排序是冒泡排序的改进版。

    js实现代码:

    // 快速排序
    function qsort(arr) {
      if (arr.length < 2) {// 没有元素或只有1个元素 无需排序
        return arr;
      } else {
        const piv = arr[0] // 第一个元素作为基准值
        let Larr = [], Rarr = []; //左侧 < 基准值数组 右侧 > 基准值数组
        for (let i = 1; i < arr.length; i++) {
          if (arr[i] < piv) {
            Larr.push(arr[i])
          } else {
            Rarr.push(arr[i])
          }
        }
        // 递归调用qsort 结果返回新数组
        return [...qsort(Larr), piv, ...qsort(Rarr)]
      }
    }
    const arr = qsort([5, 6, 100, 30, 50, 10, 1, 5, 3, 9, 10])
    console.log(arr) // [1, 3, 5, 5, 6, 9, 10, 10, 30, 50, 100]

    此时大O为O(n),因为存在递归,需要开新栈空间,有空间复杂度。

    大O更小的一种方式是每次都将中间一个元素作为基准值,也就是配合二分法,这样每次for的次数将减少一半,大O为O(logn)

    欢迎一起交流!
    【http://wuhairui.cnblogs.com/】

  • 相关阅读:
    23种设计模式彩图
    Win10间歇性卡顿
    RDMA
    mii-tool与ethtool的用法详解
    linux下模拟CPU占用100%小程序
    Linux SNMP 监控一些常用OID
    SNMP协议介绍
    set排序(个人模版)
    TSP(个人模版)
    树的重心(个人模版)
  • 原文地址:https://www.cnblogs.com/wuhairui/p/14848612.html
Copyright © 2011-2022 走看看