冒泡排序

// 冒泡排序:相领两个元素比较 符合条件的不变 ,  不符合条件则调换两个元素位置
        // 如let arr =  [4,3,1,2,5,8,6]  如果条件以升序排列  则第一次比较arr[0]>arr[1]   则调换两个元素位置 此时arr[1] == 4  arr[1]>arr[2]?继续第一步操作:比较arr[2] arr[3]
        // 代码实现
        
        function sort(arr){
            for(let i = 0 ; i < arr.length ; i++){
                for(let j = 0 ; j < arr.length - 1 ; j++){
                    if(arr[j]>arr[j+1]){
                        let temp = arr[j+1];
                        arr[j+1] = arr[j];
                        arr[j] = temp;
                    }
                }
            }
        }
        sort([4,3,1,2,5,8,6]);
        
        
        // 优化1:列如数组[4,1,6,7,8,9]  这个数组只需要移动一步就能成为有序数组 但是每次进入第二个for循环都需要两两相互比较  
        //定义一个boolean型变量 如果在第二层for循环中  相邻两个元素比较都为false  则此时的数组已经是有序数组了 跳出循环
        function sort_a(arr){
            for(let i = 0 ; i < arr.length ; i++){
                let flag = true;
                for(let j = 0 ; j < arr.length - 1 ; j++){
                    if(arr[j]>arr[j+1]){
                        let temp = arr[j+1];
                        arr[j+1] = arr[j];
                        arr[j] = temp;
                        flag = false;
                    }
                }
                if(flag){
                    break;
                }
            }
        }
        sort_a([4,1,6,7,8,9]);
        
        // 优化2:列如数组[4,2,1,6,7,8,9]  在比较这个数组的时候  后面的 6 7 8 9 四个元素已经是有序的了 ,但是每次进入for循环 都会比较这些已经排序了的元素
        // 定义一个变量 记录上一次循环比较排序时的最后一次两个相邻元素比较的数组下标  则在下一次进入for循环时 遍历数组的最大值则为这个变量  则这个变量的下标值的数组以后元素为有序
        
        function sort_b(arr){
            for(let i = 0 ; i < arr.length ; i++){
                let flag = true;
                let sortIndex = arr.length - 1;
                for(let j = 0 ; j < sortIndex; j++){
                    if(arr[j]>arr[j+1]){
                        let temp = arr[j+1];
                        arr[j+1] = arr[j];
                        arr[j] = temp;
                        flag = false;
                        sortIndex = j;
                    }
                }
                if(flag){
                    break;
                }
            }
        }
        sort_b([4,2,1,6,7,8,9]);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值