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中止循环... 因此能节省不必要的循环。

  • 相关阅读:
    Linux多网卡的时候执行机器Ip
    Base64加密算法
    MD5中Java和Js配套实现
    Maven依赖war开发,找不到war里头的class解决方案
    Java文件上传下载
    ①SpringBoot入门教学篇
    Java开发过程中乱码问题理解
    git切换到新的远程地址
    使用tablayout和recyclerview的时候,报重复添加Fragment错误
    项目组件化,找不到控件, or 控件为null
  • 原文地址:https://www.cnblogs.com/garfieldzhong/p/12545322.html
Copyright © 2011-2022 走看看