• 冒泡、插入、选择、归并、快速排序


    //冒泡bubble
    function bubbleSort(arr) {
      let l = arr.length;
      for (let i = 0; i < l; i++) {
        for (let j = 0; j < l - i - 1; j++) {
          if (arr[j] > arr[j + 1]) {
            [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]]
          }
        }
      }
      return arr;
    }
    
    //插入insert
    function insertSort(arr) {
      let l = arr.length;
      for (let i = 1; i < l; i++) {
        let temp = arr[i], j = i;
        while (temp < arr[j - 1] && j > 0) {
          arr[j] = arr[j - 1];
          j--;
        }
        if (i !== j)
          arr[j] = temp;
      }
      return arr;
    }
    //选择select
    function seletSort(arr) {
      let l = arr.length;
      for (let i = 0; i < l; i++) {
        let minIndex = i;
        for (let j = i; j < l; j++) {
          if (arr[j] < arr[minIndex]) {
            minIndex = j;
          }
        }
        if (minIndex !== i) {
          [arr[minIndex], arr[i]] = [arr[i], arr[minIndex]]
        }
      }
      return arr;
    }
    //归并merge
    function mergeSort(arr) {
      let l = arr.length;
      if (l <= 1) {
        return arr;
      }
      let mid = Math.floor(l / 2),
        leftArr = arr.slice(0, mid),
        rightArr = arr.slice(mid, l);
      return merge(mergeSort(leftArr), mergeSort(rightArr));
    }
    function merge(leftArr, rightArr) {
      let i = 0, j = 0, ll = leftArr.length, rl = rightArr.length, res = [];
      while (i < ll && j < rl) {
        if (leftArr[i] < rightArr[j]) {
          res.push(leftArr[i]);
          i++;
        } else {
          res.push(rightArr[j])
          j++;
        }
      }
      if (i < ll) {
        res.push(...leftArr.slice(i, ll));
      }
      if (j < rl) {
        res.push(...rightArr.slice(j, rl));
      }
      return res;
    }
    //快速 quick
    function quickSort(arr) {
      return quick(arr, 0, arr.length - 1)
    }
    function quick(arr, left, right) {
      if (right > left) {
        let index = partition(arr, left, right);
        if (left < index - 1) {
          quick(arr, left, index - 1)
        }
        if (index + 1 < right) {
          quick(arr, index + 1, right)
        }
      }
      return arr;
    }
    function partition(arr, left, right) {
      let mid = Math.floor((left + right) / 2), i = left, j = right;
      while (i < j) {
        while (arr[i] < arr[mid]) {
          i++;
        }
        while (arr[j] > arr[mid]) {
          j--;
        }
        if (i < j) {
          [arr[i], arr[j]] = [arr[j], arr[i]]
        }
      }
      return i;
    }
    
  • 相关阅读:
    php redis 延迟队列
    mysql 分库分表
    c++ 指针与引用
    c++ 格式化字符串
    c++ 在class A的构造函数中初始化另一个类的对象(调用B::B())时报错: error: no matching function for call to 'B:B()'
    c++ 正则匹配
    c++ 格式化时间
    c++ 读写文件
    StampedLock
    Mock单元测试入门
  • 原文地址:https://www.cnblogs.com/superlizhao/p/12890290.html
Copyright © 2020-2023  润新知