前端第二周,Javascript--冒泡排序

本文详细介绍了冒泡排序的过程,包括其特点如比较次数和轮数,以及如何通过嵌套循环实现排序。通过示例展示了如何使用JavaScript封装冒泡排序函数。

  //冒泡排序

        //冒泡,是因为越大的元素会经由交换慢慢“浮”到数列的顶端,

        //就如同碳酸饮料中二氧花坛的气泡最终会上浮到顶端一样,故名:'冒泡排序'

        numarr = [36, 18, 77, 45, 92, 23, 11];

        //  18 36

        //     36 77

        //        45 77

        //           77 92

        //              23 92

        //                 11 92

        // [18,36,45,77,23,11,92];

        //  18 36

        //     36 45

        //        45 77

        //           23 77

        //              11 77

        // [18,36,45,23,11,77,92];

        //  18 36

        //     36 45

        //        23 45

        //           11 45

        // [18,36,23,11,45,77,92];

        //  18 36

        //     23 36

        //        11 36

        // [18,23,11,36,45,77,92];

        //  18 23

        //     11 23

        // [18,11,23,36,45,77,92];

        //  11 18

        // [11,18,23,36,45,77,92];



 

        总结特点:

             1. 不论有多少个值俩俩比较,得到最大的值,需要比较的次数是值的个数-1次

             2. 不论有多少个值参与排序,最终完成排序,需要从头到尾比较的论述值得个数-1轮

              3.完成排序,在每一轮的比较过程中,下一轮俩俩比较的次数可以比上一轮少一次   

        //控制数组完成排序需要多少论比较

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

            //控制数组每一轮比较的次数

            for (var j = 0; j < numarr.length - 1 - i; j++) {//因为第一轮时最大值已经放在最后,第二三..轮后最大值就不进行比较了所以在这里要再减去一个i

                //判断循环变量当前的这个值如果大于下一个值

                if (numarr[j] > numarr[j + 1]) {  //索引进行比较第一个为0 第二个为0+1=1 依此类推。

                    //交换 循环变量当前的这个值 和下一个值 的位置

                    var tp = numarr[j];

                    numarr[j] = numarr[j + 1];

                    numarr[j + 1] = tp;  //交换就是让大的往后面走,小的就自己

                }

            }

        }

        console.log(numarr);


        //封装数组冒泡排序的方法

        function bubblingSort(numarr) {

            //控制数组完成排序需要多少论比较

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

                //控制数组每一轮比较的次数

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

                    // 判断循环变量当前的这个值如果大于下一个值

                    if (numarr[j] > numarr[j + 1]) {

                        var tp = numarr[j];

                        numarr[j] = numarr[j + 1];

                        numarr[j + 1] = tp;

                    }

                }

            }

            return numarr;

        }

        var arr = bubblingSort([9, 2, 6, 4, 1, 8, 7, 5]);

        console.log(arr);//[1, 2, 4, 5, 6, 7, 8, 9]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值