zoukankan      html  css  js  c++  java
  • 冒泡、插入、选择、归并、快速排序

    //冒泡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;
    }
    
  • 相关阅读:
    java 基础笔记
    专业人士给我的JAVA学习建议
    JAVA版2048
    学习构建之法后的疑问
    角色职责及技术需求相关思考
    使用Composer安装Yii2框架+Windows下的XAMPP部署Yii2
    MiniProgram开发--云开发(1)
    Android Studio丢失Logcat问题
    SSH异常处理记录
    Android环境搭建与通过命令行方式创建Android应用
  • 原文地址:https://www.cnblogs.com/superlizhao/p/12890290.html
Copyright © 2011-2022 走看看