冒泡排序
var arr = [3,5,2,7,9,11,6];
首先需要了解两个数之间的换位
数组arr里面3和5之间的换位
var temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
冒泡排序原理时两两比对
0 1 2 i
1 2 3 i+1
for(var i = 0 ; i < arr.length ; i ++){
console.log(arr[i] ,arr[i+1]);
}
代码输出的是谁和谁比对
输出结果:
3 5
5 2
2 7
7 9
9 11
11 6
6 undefined
i最大下标是6有点多余了,会和undefined比对一次,没有必要,所以在arr.length-1
for(var i = 0 ; i < arr.length - 1 ; i ++){
console.log(arr[i] ,arr[i+1]);
}
输出:
3 5
5 2
2 7
7 9
9 11
11 6
for(var i = 0 ; i < arr.length - 1 ; i ++){
//arr[i] 前面;
//arr[i + 1] 后面
//如果前面的数比后面的数大,则互换位置
if( arr[i] > arr[ i + 1]){
var temp = arr[i];
arr[i] = arr[ i + 1 ];
arr[i + 1] = temp;
}
console.log(arr);
操作前:
[3, 5, 2, 7, 9, 11, 6]
操作后:
[3, 2, 5, 7, 9, 6, 11]
可以看到,5和2的位置调换了
用for循环重复代码
找到第二大的数字放在第二个位置
for(var i = 0 ; i< arr.length-2 ; i ++){
if( arr[i] > arr[ i + 1]){
var temp = arr[i];
arr[i] = arr[ i + 1 ];
arr[i + 1] = temp;
}
}
console.log(arr);
找到第三大的数字放在第三个位置
for(var i = 0 ; i< arr.length-2 ; i ++){
if( arr[i] > arr[ i + 1]){
var temp = arr[i];
arr[i] = arr[ i + 1 ];
arr[i + 1] = temp;
}
}
console.log(arr);
执行总轮数 : 7 => 7 -1;
for(var k = 0 ; k <arr.length - 1 ; k ++){
for(var i = 0 ; i< arr.length -1 -k ; i ++){
if(arr[i] > arr[i + 1]){
var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
console.log(arr);