zoukankan      html  css  js  c++  java
  • js排序之快速排序

    快速排序的3个基本步骤:

    1. 从数组中选择一个元素作为基准点
    2. 排序数组,所有比基准值小的元素摆放在左边,而大于基准值的摆放在右边。每次分割结束以后基准值会插入到中间去。
    3. 最后利用递归,将摆放在左边的数组和右边的数组在进行一次上述的1和2操作。

    快速排序实现方式一(简明易懂,好理解,好写,适合面试时候写)

    var quickSort = function(arr) {
      if (arr.length <= 1) {
        return arr;
      }
      var pivotIndex = Math.floor(arr.length / 2);
      var pivot = arr.splice(pivotIndex, 1)[0];
      var left = [];
      var right = [];
    
      for (var i = 0; i < arr.length; i++) {
        if (arr[i] < pivot) {
          left.push(arr[i]);
        } else {
          right.push(arr[i]);
        }
      }
      return quickSort(left).concat([pivot], quickSort(right));
    };

     

    快速排序的实现方式二(正规写法)

    function swap(A, i, j) {
      const t = A[i];
      A[i] = A[j];
      A[j] = t;
    }
    
    /**
     *
     * @param {*} A  数组
     * @param {*} p  起始下标
     * @param {*} r  结束下标 + 1
     */
    function divide(A, p, r) {
      const x = A[r - 1];
      let i = p - 1;
    
      for (let j = p; j < r - 1; j++) {
        if (A[j] <= x) {
          i++;
          swap(A, i, j);
        }
      }
    
      swap(A, i + 1, r - 1);
    
      return i + 1;
    }
    
    /**
     * 
     * @param {*} A  数组
     * @param {*} p  起始下标
     * @param {*} r  结束下标 + 1
     */
    function qsort(A, p = 0, r) {
      r = r || A.length;
    
      if (p < r - 1) {
        const q = divide(A, p, r);
        qsort(A, p, q);
        qsort(A, q + 1, r);
      }
    
      return A;
    }
    青云直上三千码
  • 相关阅读:
    糊涂的教授
    有趣的英语角
    聚会
    新年礼物
    三核苷酸
    数字编码
    【同行说技术】iOS程序员从小白到大神必读资料汇总
    【同行说技术】Android图片处理技术资料汇总(一)
    【同行说技术】swift最全学习资料汇集(一)
    【同行说技术】iOS程序员从小白到大神必读资料汇总(一)
  • 原文地址:https://www.cnblogs.com/djjlovedjj/p/14595164.html
Copyright © 2011-2022 走看看