其实冒泡法排序是一个固定格式的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 );//