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

    伪快速排序
    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);
    /**  分析
     *
     */
  • 相关阅读:
    Python numpy.transpose 详解
    如何理解张量tensor
    tensorflow中张量的理解
    Theano入门——CIFAR-10和CIFAR-100数据集
    阻止form表单提交的问题
    webp图片优化
    Css控制网页变灰
    express-session相关用法
    REM+SVG Sprite,web app案例
    HTML 5 Audio/Video DOM canplaythrough 事件在移动端遇到的坑
  • 原文地址:https://www.cnblogs.com/xiaosongJiang/p/10915385.html
Copyright © 2011-2022 走看看