• 快速排序


    伪快速排序
    function
    quickSort (arr) { if (arr.length === 0) { return []; } let left = []; let right = []; let pivot = arr[0]; for (let index = 1; index < arr.length; index++) { const element = arr[index]; if (element < pivot) { left.push(element); } else { right.push(element); } } return [...quickSort(left), pivot, ...quickSort(right)]; } const arr = [2, 3, 43, 5, 1, 7, 6, 3, 22]; console.log('排序之前', arr); const res = quickSort(arr); console.log('排序之后', res);
    排序之前 [
      2,  3, 43,
      5,  1,  7,
      6,  3, 22
    ]
    排序之后 [
      1,  2,  3,
      3,  5,  6,
      7, 22, 43
    ]

    function quickSort (arr) {
      if (arr.length <= 1) {
        return arr;
      }
      quick(arr, 0, arr.length - 1); // 将整个arr数组快速排序,left和right分别指向数组左右两端。
    }
    function quick (arr, left, right) {
      if (left >= right) return;
      let i = left;
      let j = right;
      const reference = arr[left]; // 定义可移动的左右指针 i,j,定义reference为基数。
      while (i < j) {
        while (i < j && arr[j] >= reference) { // 左移 找到一个比基准值小的数交换
          j--;
        }
        // 交换
        arr[i] = arr[j];
        while (i < j && arr[i] <= reference) { // 右移 直到找到大于参照的元素
          i++;
        }
        // 交换
        arr[j] = arr[i]; // 将较大的值放在右边如果没有比基准值大的数就是将自己赋值给自己(i 等于 j)
        console.log(arr);
      }
      arr[j] = reference; // 将基准值放至中央位置完成一次循环(这时候 j 等于 i )
      quick(arr, left, j - 1); // 将左边的无序数组重复上面的操作
      quick(arr, j + 1, right); // 将右边的无序数组重复上面的操作
    }
    const arr = [2, 5, 8, 9, 3];
    quickSort(arr);
    console.log(arr);
    /**  分析
     *
     */
  • 相关阅读:
    【转载】C/C++中extern关键字详解
    【转载】extern "C"的用法解析(原博主就是抄百度百科的,不如另外一篇好)
    lua Date和Time
    MySQL-Linux安装
    Hive-0.13安装
    MR案例:单表关联查询
    MR案例:小文件处理方案
    MR案例:链式ChainMapper
    MR案例:定制Partitioner
    MR案例:多文件输出MultipleOutputs
  • 原文地址:https://www.cnblogs.com/xiaosongJiang/p/10915385.html
Copyright © 2020-2023  润新知