• 07-冒泡排序


    冒泡排序:

    1.双层循环,因为自己不用跟自己比,所以循环的时候要arr.length-1,比如数组length为5,<5-1 -> < 4  ->那么就是0 1 2 3 循环四轮

    2.外层循环是轮数,内存循环是比较次数(握手问题一样,你上一轮已经给我握过手了,咱俩比较过了,在次数循环中不需要给你握了。就减掉握过的轮数,也就是还需要再握几次)

    3.找到后,通过一个中间容器,让两者交换位置

    var arr1 = [3, 44, 13, 8, 9, 7, 1, 2];
    
    function bubblingSort1(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
            var temp = null;
            if (arr[i] > arr[i + 1]) {
                temp = arr[i];
                arr[i] = arr[i + 1];
                arr[i + 1] = temp;
            }
        }
        return arr;
    }
    
    var res1 = bubblingSort1(arr1);
    console.log(res1); // [3, 13, 1, 8, 9, 7, 1, 2, 44]  ->每次把最大的比较出来放到了最后面
    
    // ------------------------------------------------------------------------------------------------
    
    // 加入轮数:外面再加一层循环,表示每个数组中的每一个元素都要像上面那样去挨个与其他元素进行比较
    var arr2 = [3, 44, 13, 8, 9, 7, 1, 2];
    
    function bubblingSort2(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
            for (var k = 0; k < arr.length - 1; k++) {
                var temp = null;
                if (arr[k] > arr[k + 1]) {
                    temp = arr[k];
                    arr[k] = arr[k + 1];
                    arr[k + 1] = temp;
                }
            }
        }
        return arr;
    }
    
    var res2 = bubblingSort2(arr2);
    console.log(res2); // [1, 2,  3,  7,8, 9, 13, 44]
    
    // 冒泡复杂度:O(n ^ 2)
    
    // ------------------------------------------------------------------------------------------------
    
    // 冒泡优化复杂度优化:
    // 外面是轮数,里面是元素依次比较,已经比较过的不用再次循环比较了,就把已经比较过的轮数给减掉,
    // 所以有了arr.length-1 - i, 减去的这个i是当前i++后的,也就是已经比较过的轮数(也可以说是比较过的元素)
    var arr3 = [3, 44, 13, 8, 9, 7, 1, 2];
    
    function bubblingSort3(arr) {
        for (var i = 0; i < arr.length - 1; i++) {
            for (var k = 0; k < arr.length - 1 - i; k++) {
                var temp = null;
                if (arr[k] > arr[k + 1]) {
                    temp = arr[k];
                    arr[k] = arr[k + 1];
                    arr[k + 1] = temp;
                }
            }
        }
        return arr;
    }
    
    var res3 = bubblingSort2(arr3);
    console.log(res3); // [1, 2,  3,  7,8, 9, 13, 44]
    // 优化后的复杂度是 O(n^2 /2)  -> /2是常量级,复杂度不考虑常量级,所以其复杂度还是n的平方
  • 相关阅读:
    P2519 [HAOI2011]problem a
    P1084 疫情控制
    P1941 飞扬的小鸟
    NOIP填坑计划
    P2831 愤怒的小鸟
    AGC 16 D
    P3960 列队
    Python3爬虫相关软件,库的安装
    软件理论基础—— 第一章命题逻辑系统L
    软件理论基础——导论
  • 原文地址:https://www.cnblogs.com/haoqiyouyu/p/14901817.html
Copyright © 2020-2023  润新知