zoukankan      html  css  js  c++  java
  • 冒泡排序

    冒泡排序:是指重复访问要排序的元素列,依次比较相临的两个元素,如果他们的顺序不是想要的顺序就把它们互换。

    实现:

    function bubbleSort(arr) {
        var len = arr.length;
        for(var i = 0; i < len; i++) {
            var jLen = len - 1 - i; 
            for(var (j = 0; j < jLen; j++)  {
               if (arr[j] > arr[j+1]) {
                  var temp = arr[j+1];
                  arr[j+1] = arr[j];
                  arr[j] = temp;
                }
            }
        } 
        return arr;
    }

    es6:

    function bubbleSort(arr) {
        const Len = arr.length;
        for (let i = 0; i < Len; i++) {
            const jLen = Len - 1 - i;
            for (let j = 0; j < jLen; j++) {
                if (arr[j] > arr[j+1]) {
                    [arr[j+1], arr[j]] = [arr[j], arr[j+1]];
                }
            }
             
        }
        return arr;
    }  
    
    let arr = [9, 4, 5, 6, 2, 1, 3];
    bubbleSort(arr) // => [1, 2, 3, 4, 5, 6, 9];

    大功告成...

    但是,仔细想想总感觉有点不太对~  如果原始数组为 arr = [1, 2, 3, 4, 5, 6, 9] 会怎么样?

    这是一个原本就正确的排序,无须再冒泡~ 但是,此方法依然会进行依次遍历~ 那有没有办法改进呢?

    function bubbleSort(arr) {
        const Len = arr.length;
        for (let i = 0; i < Len; i++) {
           let flag = true; // 立标签,标记是否需要再执行循环
            const jLen = Len - 1 - i;
            for (let j = 0; j < jLen; j++) {
                if (arr[j] > arr[j+1]) {
                    [arr[j+1], arr[j]] = [arr[j], arr[j+1]];
                    flag = false;
                }
            }
           if (flag) {
                break;
           }
             
        }
        return arr;
    }  
    

    通过定义一个flag,来确定哪一轮中可以确定排序完毕, 如果某一轮的所有次比较都没有进行交换操作(就是没有再进入if语句),说明排序完毕;因此flag仍为true, 为true则 break中止循环... 因此能节省不必要的循环。

  • 相关阅读:
    1082 射击比赛 (20 分)
    1091 N-自守数 (15 分)
    1064 朋友数 (20 分)
    1031 查验身份证 (15 分)
    1028 人口普查 (20 分)
    1059 C语言竞赛 (20 分)
    1083 是否存在相等的差 (20 分)
    1077 互评成绩计算 (20 分)
    792. 高精度减法
    791. 高精度加法
  • 原文地址:https://www.cnblogs.com/garfieldzhong/p/12545322.html
Copyright © 2011-2022 走看看