zoukankan      html  css  js  c++  java
  • JS排序算法总结:(一)冒泡排序

    目的:掌握 冒泡排序 基本思想与过程、代码实现、时间复杂度与优化

    1、基本思想与过程:

      从后向前两两比教,大数下沉,小数冒泡,一轮比较后,最小数的位置就排好了,在第一个位置。重复上述过程,依次将第2.3...n-1个最小数排好位置。

    2、代码实现:

    function BubbleSort(arr){
         var temp;//临时变量
         for(var i=0; i<arr.length-1; i++){   //表示趟数,一共arr.length-1次。
            var count = 0; //打印用的参数
             for(var j=arr.length-1; j>i; j--){
                 if(arr[j] < arr[j-1]){
                     temp = arr[j];
                     arr[j] = arr[j-1];
                     arr[j-1] = temp;
                     count++;
                 }
             }
             console.log('第'+i+'轮的比较次数为'+count);
         }
         return arr;
     }

    3、时间复杂度与优化

    时间复杂度:O(n2)

    优化:如上,第8/9轮的排序没有意义,

      原因:数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次。

      方案:设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。这样当一轮比较结束后如果flag仍为false,说明数据的顺序已经排好,没有必要继续进行下去。

    function BubbleSort1(arr){
        var temp;//临时变量
        var flag;//是否交换标志
        for(var i=0; i<arr.length-1; i++){   //表示趟数,一共arr.length-1次。
            flag = false;
            var count = 0;//打印用的参数
            for(var j=arr.length-1; j>i; j--){
                if(arr[j] < arr[j-1]){
                    temp = arr[j];
                    arr[j] = arr[j-1];
                    arr[j-1] = temp;
                    flag = true;
                    count++;
                }
            }
            console.log('第'+i+'轮的比较次数为'+count)
            if(!flag) break;
        }
        return arr;
     }

  • 相关阅读:
    【飞谷六期】爬虫项目3
    Design Pattern
    Markdown
    Git
    Storm-源码分析汇总
    Storm-源码分析-acker (backtype.storm.daemon.acker)
    Storm-源码分析-Topology Submit-Executor
    Storm-源码分析-Topology Submit-Executor-mk-threads
    Storm-源码分析- bolt (backtype.storm.task)
    Storm-源码分析- spout (backtype.storm.spout)
  • 原文地址:https://www.cnblogs.com/CassieHouse/p/9544926.html
Copyright © 2011-2022 走看看