八大排序算法总结:(一)冒泡排序

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

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;
 }

扫描二维码关注公众号,回复: 2907761 查看本文章

猜你喜欢

转载自www.cnblogs.com/CassieHouse/p/9544926.html