数组的冒泡排序

40 篇文章 0 订阅
32 篇文章 0 订阅
 <script>
        // var ary = [4,3,5,2,1];
        //冒泡排序的思想:让当前项与后一项进行比较,如果当前项大于后一项,两者交换位置
        //第一轮比较:
        //拿出数组的第一项4与后一项3比较,4>3,交换位置[3,4,5,2,1]
        //4<5 不交换位置[3,4,5,2,1]
        //5>2 交换位置[3,4,2,5,1]
        //5>1 交换位置[3,4,2,1,5]
        //虽然没有实现最后的目标,但是已经把数组中当前最大的那个值5已经放到数组的末尾位置了
        //第一轮比较了四次,一共5个数,不用和自己比,最多比四次
        //第二轮比较:
        //3<4 不交换位置
        //4>2 交换位置[3,2,4,1,5]
        //4>1 交换位置[3,2,1,4,5]
        //也没有实现最后的目标,但是把剩余项中最大的那个4放在倒数第二位了
        //第二轮比较了三次,首先不用和自己比,最多四次,但是第一轮我们已经把最大的一个数放到末尾了,不需要再和末尾的5比了
        //第三轮比较:
        //3>2 交换位置[2,3,1,4,5]
        //3>1 交换位置[2,1,3,4,5]
        //第三轮比较了两次,首先不用和自己比,最多四次,但是第一轮第二轮我们已经把最大的俩个数放到了末尾,不需要再和4/5比了
        //第四轮比较:
        //2>1 交换位置[1,2,3,4,5]

        //每一轮当前项和后一项俩俩比较的话,虽然不一定达到最后的目标结果,但是已经把当前最大的那个值放在后面了->数组一共有5项,我只需要比较4轮,把四个最大值分别放到末尾,就实现了排序,一共最多需要比较多少轮ary.length-1
        // i 轮数:i-0;i<ary.length-1;
        // j 代表每一轮比较的次数

        //两者交换位置

        // var a = 12;
        // var b = 13;
        // var c = null;
        // c = a;
        // a = b;
        // b = c;

        // var a = 13;
        // var b = 15;
        // a = a+b; //28
        // b = a-b; //13
        // a = a-b; //15

        // function bubbleSort(ary) {
        //     var temp = null;
        //     for(var i = 0;i < ary.length - 1; i++ ){
        //         for (var j = 0;j < ary.length - 1 - i ; j++) {//j每一轮比较的次数
        //            if (ary[j] > ary[j+1]) {
        //                temp = ary[j];
        //                ary[j] = ary[j+1];
        //                ary[j+1] = temp;

        //            }

        //         }
        //     }
        //     return ary;
        // }

        //  var ary = [4, 3, 5, 1, 2];
        //  var res = bubbleSort(ary);
        //  console.log(res);

        //优化
    //当flag=false时,退出循环
        function bubbleSort(ary) {
            var flag = false;
            for(var i = 0;i<ary.length-1;i++){
                for(var j = 0;j<ary.length-1-i;j++){
                    if (ary[j]>ary[j+1]) {
                        ary[j] = ary[j]+ary[j+1];
                        ary[j+1] = ary[j]-ary[j+1];
                        ary[j] = ary[j] - ary[j+1];
                        flag = true;
                    }

                }
                if (flag) {
                    flag = false;

                }else{
                    break;
                }
            }
            return ary
        }
          var ary = [2, 1, 3, 5, 6];
          var res = bubbleSort(ary);
          console.log(res);


    </script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值