冒泡排序之基础优化

Posted strivegys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序之基础优化相关的知识,希望对你有一定的参考价值。

  • 普通版本
function doubleSort(arr) {
  let len = arr.length - 1;
  for(let i=0; i<arr.length; i++) {   // 第一层循环遍历总次数
    for(let j=0; j<len-i; j++) {    // 第二层循环 从左往右 j 与 j + 1 数值比较 
      if(arr[j] > arr[j+1]) {
         let temp = arr[j];
        arr[j] = arr[j+1]
        arr[j+1] = temp;
      }
    }
  }
  return arr;
}
  • 优化版本(一)
function doubleSort(arr) {
    let len = arr.length - 1;
    let isExchange;            // 增加标志位字段,判断后面对比是否进行数值交换,如果没有交换,代表是有序,否则代表无序
    for(let i=0; i<arr.length; i++) {
        isExchange = true;       // 每次循环开始,都是为 true, 交换之后才置为 false
        for(let j=0; j<len; j++) {
            if(arr[j] > arr[j+1]) {
                let temp = arr[j];
                arr[j] = arr[j+1]
                arr[j+1] = temp;
                isExchange = false;
            }
        }
        if(isExchange) {    // 如果有序后面就不要循环对比了,直接跳出
            break;
        };
    }
    return arr;
}
  • 优化版本(二)
function doubleSort(arr) {
    let len = arr.length - 1;
    let isExchange,sortLine;    //  记录最后一次交换的位置,减少下次内部循环的次数
    for(let i=0; i<arr.length; i++) {
        isExchange = true;
        for(let j=0; j<len; j++) {
            if(arr[j] > arr[j+1]) {
                let temp = arr[j];
                arr[j] = arr[j+1]
                arr[j+1] = temp;
                isExchange = false;
                sortLine = j;
            }
        }
        len = sortLine;
        if(isExchange) {
            break;
        };
    }
    return arr;
}

 高级版本优化 之 鸡尾酒排序,期待 !

以上是关于冒泡排序之基础优化的主要内容,如果未能解决你的问题,请参考以下文章

排序算法之希尔(优化冒泡)排序

图解算法系列之冒泡排序(优化版)

重温基础算法内部排序之冒泡排序法

java基础之冒泡排序

面试必考算法题之冒泡排序 (优化脱坑版)!

算法基础之--冒泡排序算法