JS冒泡排序详细解读

            排序:就是把一个乱序的数组,通过我们的处理,让他变成一个有序的数组

            冒泡排序

                ==>先遍历数组,让挨着的两个进行比较,如果前一个比后一个大,那么就把两个数据换个位置

                ==>数组遍历一遍以后,那么最后一个数字就是最大的那个了

                ==>然后进行第二遍遍历,还是按照之前的规则,第二大的数字就会跑到倒数第二个位置了

                ==>以此类推,最后就会按照顺序把数组排好了

         1 先准备一个乱序的数组

        var arr = [3, 1, 5, 6, 4, 9, 7, 2, 8];

         2 先不急着循环,先来看数组里面内容换个位置,例如换:arr[0]和arr[1]

        var temp = arr[1];

         arr[1] = arr[0];

         arr[0] = temp;

        // 3 第一次遍历数组,把最大的放到最后面去

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

             //每次都是当前一个和后一个比,所以最后一个比较就是:

             //arr[arr.length-2]和arr[arr.length-1]比

             //判断,如果数组中的当前一个比后一个大,那么两个交换一下位置

            if(arr[i]>arr[i+1]){

              var temp = arr[i];

                arr[i] = arr[i+1];

                arr[i+1] =temp;

             }

         }

        //第一次结束以后,数组中的最后一个,就会是最大的那个数字

        //4 然后我们把上面的代码执行多次,数据有多少项就执行多少次

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

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

                //每次都是当前一个和后一个比,所以最后一个比较就是:

                //arr[arr.length-2]和arr[arr.length-1]比

                //判断,如果数组中的当前一个比后一个大,那么两个交换一下位置

                if (arr[i] > arr[i + 1]) {

                    var temp = arr[i];

                    arr[i] = arr[i + 1];

                    arr[i + 1] = temp;

                }

            }

        }

        /* 

        给一些优化

            1 想象一个问题,假设数组长度是9,第八次排完以后,后面8个数字已经按照顺序排好了,剩下的那个最小的,一定是在最前面,那么第九次就已经没有意义了,因为最小的已经在前面了,不会再有任何换位置出现了

            2 第一次的时候,已经把最大的数字放在最后面了, 那么第二次的时候,其实倒数第二个和倒数最后一个就不用比了, 因为我们就是要把倒数第二大的放在倒数第二的位置,即使比较了, 也不会换位置。第三次就要倒数第三个数字就不用再和后两个比较了。 以此类推,那么其实每次遍历的时候,就遍历当前次数-1

             至此,冒泡排序就完成了

        */

        // 优化1以后的结果

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

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

                //每次都是当前一个和后一个比,所以最后一个比较就是:

                //arr[arr.length-2]和arr[arr.length-1]比

                //判断,如果数组中的当前一个比后一个大,那么两个交换一下位置

                if(arr[i]>arr[i+1]){

                    var temp = arr[i];

                     arr[i] = arr[i+1];

                     arr[i+1] =temp;

                }

             }

         }

        // 优化2以后的结构

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

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

                 //每次都是当前一个和后一个比,所以最后一个比较就是:

                //arr[arr.length-2]和arr[arr.length-1]比

                 //判断,如果数组中的当前一个比后一个大,那么两个交换一下位置

                if (arr[i] > arr[i + 1]) {

                    var temp = arr[i];

                     arr[i] = arr[i + 1];

                     arr[i + 1] = temp;

                 }

             }

         }

        // 优化3 可能出现还没完全比较完便已经正确

        var flag = 0;       // 统计一共要进行多少次外层for循环

        var arr = [3, 1, 5, 6, 4, 9, 7, 2, 8];

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

            var count = 0;       // 统计arr[i] < arr[i+1] 的次数

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

                if (arr[i] > arr[i + 1]) {

                    var temp = arr[i + 1];

                    arr[i + 1] = arr[i];

                    arr[i] = temp;

                } else {

                    count++;     //    每当arr[i] < arr[i+1] 的时候,次数+1

                }

            }

            if (count == arr.length - 1 - j) {

                break;       //    当arr[i] < arr[i+1] 的次数 等于 所有比较次数的时候,此时排序已经完全正确,可直接结束

            }

            count = 0;     //    每次外层for循环结束都要重置次数

            flag++;    //  每进行一次外层for循环,便记录1次(放在外层for循环的末尾时,则不会加上最后一次外层for循环检测到完全正确时的情况)

        }

        console.log(arr);

        console.log(flag);

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342