冒泡

其实冒泡法排序是一个固定格式的for循环嵌套

for(var i = 0;i<arr.length - 1;i++){//1.外层循环决定比较的轮数

for(var j = 0;j< arr.length - 1 - i;j++){//2.内层循环决定每一轮比较的次数

    if(arr[j] > arr[j+1]){//3.交换相邻元素:比较两个相邻数字的大小
         var temp = arr[j];
         arr[j] = arr[j+1];
        arr[j+1] = temp;
    }
}

}

var arr = [18,15,10,20,5];

/*找规律:第一个规律:找出需要比较的轮数
  1.数组的长度为5 需要比较4轮
2.数组的长度为6,需要比较5轮
3.数组的长度为 arr.length  需要比较  arr.lenthg - 1  轮

第二个规律:找出每一轮需要比较多少次
数组长度为5  第一轮 i = 0  :需要比较四次
数组长度为5  第二轮 i =1: 需要比较三次  (因为第一轮已经找出了最大的数放在数组的最后面)
数组长度为5 第三轮 i = 2:需要比较两次  (因为前两轮已经找出了最大的两个数字,本轮只需要比较前面三个数字即可)
数组长度为5  第四轮 i = 3:需要比较1次 (因为前三轮已经找出了最大的三个数字,本轮只需要比较前面两个数字大小即可)

arr.length - i的值 -1 = 每一轮需要比较的次数
*/

//1.外层循环决定行:轮数
for(var i = 0;i<arr.length - 1;i++){
    //当i = 0 的时候(第一轮)  比较4次  4 + 0 = 4
    //当i = 1的时候(第二轮) 比较 3 次  3 + 1 = 4
    //当i = 2的时候(第三轮) 比较 2 次  2 + 2 = 4
    //当i = 3的时候(第四轮) 比较 1 次  3 + 1 = 4
    //规律:每一轮需要比较的次数 + i = arr.length - 1     (将i挪到等式右边求出每轮比较次数)
    //每一轮需要比较的次数 = arr.length - 1 - i

    //内层循环决定每一轮比较的次数
    for(var j = 0;j< arr.length - 1 - i;j++){
        //比较两个相邻数字的大小
        if(arr[j] > arr[j+1]){
            var temp = arr[j];
            arr[j] = arr[j+1];
            arr[j+1] = temp;
        }
    }
}

console.log ( arr );//
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值