美文网首页前端100问
【前端100问】Q54:冒泡排序如何实现,时间复杂度是多少,还可

【前端100问】Q54:冒泡排序如何实现,时间复杂度是多少,还可

作者: alanwhy | 来源:发表于2021-01-19 09:30 被阅读0次

    写在前面

    此系列来源于开源项目:前端 100 问:能搞懂 80%的请把简历给我
    为了备战 2021 春招
    每天一题,督促自己
    从多方面多角度总结答案,丰富知识
    冒泡排序如何实现,时间复杂度是多少,还可以如何改进?
    简书整合地址:前端 100 问

    正文回答

    function bubbleSort(arr) {
      for (let i = 0; i < arr.length; i++) {
        for (let j = 0; j < arr.length - i - 1; j++) {
          if (arr[j] > arr[j + 1]) {
            const temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
          }
        }
      }
      console.log(arr);
    }
    
    // 改进冒泡排序
    function bubbleSort1(arr) {
      let i = arr.length - 1;
    
      while (i > 0) {
        let pos = 0;
        for (let j = 0; j < i; j++) {
          if (arr[j] > arr[j + 1]) {
            pos = j;
            const temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
          }
        }
        i = pos;
      }
      console.log(arr);
    }
    
    function bubbleSort2(arr) {
      let low = 0;
      let high = arr.length - 1;
      let temp, j;
    
      while (low < high) {
        // 正排找最大
        for (j = low; j < high; ++j) {
          if (arr[j] > arr[j + 1]) {
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
          }
        }
        --high;
    
        // 反排找最小
        for (j = high; j > low; --j) {
          if (arr[j] < arr[j - 1]) {
            temp = arr[j];
            arr[j] = arr[j - 1];
            arr[j - 1] = temp;
          }
        }
        ++low;
      }
      console.log(arr);
    }
    

    相关文章

      网友评论

        本文标题:【前端100问】Q54:冒泡排序如何实现,时间复杂度是多少,还可

        本文链接:https://www.haomeiwen.com/subject/vxhqzktx.html