冒泡排序

  // 冒泡排序
        // 通过 冒泡排序 完成 数组中数值的排序
        // 核心思路: 
        //     两个相邻的数值,进行比较,如果第一个数值较大,就将两个单元交换存储数值

        // 每次比较一个最大值,存储在数组的结束位置

        // 冒泡排序,是比较数值,交换存储数据

        // 核心优化点:
        //     1, 循环比较时,是当前单元和下一个单元进行比较,最后一个单元是没有比较对象的
        //        实际的循环范围是  第一个单元 到 倒数第二个单元
        //        j <= arr.length-1-1
        //
        //     2, 上一次比较出的最大值,不需要参与下一次的比较
        //        j <= arr.length-1-1 -i
        //
        //     3, 如果是5个单元,实际只要循环比较4次,就可以完成所有的排序
        //        也就是只剩下最后一个单元没有排序是,是没有循环比较的对象的
        //        i 是从 0 开始 循环 实际的循环 是 0  至 arr.length-1 -1
        //        i <= arr.length-1 -1


        // 将数组数值,从小到大,进行排序
        var arr = [3,21,3,14,342,14,34,123,4,32];

        // 外层for循环,是循环执行,比较出最大值,完成整个数组的排序
        // 优化点 : n个单元,只要完成 n-1 次循环,就可以完成整个数组的排序

        // i 从 0 开始 是 方便记录 每次 少参与循环的单元
        // 第一次循环,没有比较出最大值,所有的单元都需要参与比较 此时 i 是 0 ,也就是少比较的单元是0个
        // 第二次循环,已经比较出了一个最大值,这个最大值,不再参与第二次的比较 此时 i 是 1 ,也就是少比较的单元是1个

        for(var i = 0 ; i <= arr.length-1-1 ; i++){

            // 内层for循环,完成的是,循环比较出一个最大值
            // 优化点 : 1,当前单元与下一个单元进行比较,最后一个单元是没有下一个单元比较对象
            //            实际循环是 第一个单元 至 每次需要参与比较的倒数第二个单元
            // 
            //         2,已经比较出的最大值,不参与下一次的比较
            // 
            //         第一次是所有的单元,也就是9个单元参与比较,实际循环是从第一个到倒数第二个单元,也就是第八个单元参与比较
            //         第二次最后一个单元已经是最大值,不参与比较,也就是8个单元参与比较,实际循环是从第一个到倒数第二个单元,也就是第七个单元参与比较
            //         第三次最后两个单元已经是最大值,不参与比较,也就是7个单元参与比较,实际循环是从第一个到倒数第三个单元,也就是第六个单元参与比较

            // arr.length-1 是最大的索引下标
            // 每次循环的索引下标,都只需要到,倒数第二个索引下标 arr.length-1-1
            // 每次循环,之前已经比较出的最大值,不需要再参与循环 arr.length-1-1-i

            for(var j = 0 ; j <= arr.length-1-1 -i ; j++){

                // 如果当前单元数据,大于下一个单元数据,就做存储数据的交换
                if(arr[j] > arr[j+1]){
                    var num = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = num;
                }
            }
        }
右侧打赏一下 代码改变世界一块二块也是爱
原文地址:https://www.cnblogs.com/ht955/p/14040035.html