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

  • 相关阅读:
    Android 开发笔记___存储方式__共享参数__sharedprefences
    Android 开发笔记___登陆app
    Android 开发笔记___alertDialog
    Android 开发笔记___Intent的使用
    Android 开发笔记___Activity的生命周期
    Android 开发笔记___AutoComplateTextView__自动完成文本框
    单例模式
    程序设计模式六大原则--个人理解
    简单理解适配器模式
    呱呱乐
  • 原文地址:https://www.cnblogs.com/garfieldzhong/p/12545322.html
Copyright © 2011-2022 走看看