冒泡排序:就是將一個數組中的元素按照從大到小或者從小到大的順序進行排列。
var array=[9,8,7,6,5,4,3,2,1];
第一輪比較:8,7,6,5,4,3,2,1,9 交換了8次 i=0 j=array.length-1-i
第二輪比較:7,6,5,4,3,2,1,8,9 交換了7次 i=1 j=array.length-1-i
第三輪比較:6,5,4,3,2,1,7,8,9 交換了6次 i=2 j=array.length-1-i
第四輪比較:5,4,3,2,1,6,7,8,9 交換了5次 i=3 j=array.length-1-i
第五輪比較:4,3,2,1,5,6,7,8,9 交換了4次 i=4 j=array.length-1-i
第六輪比較:3,2,1,4,5,6,7,8,9 交換了3次 i=5 j=array.length-1-i
第七輪比較:2,1,3,4,5,6,7,8,9 交換了2次 i=6 j=array.length-1-i
第八輪比較:1,2,3,4,5,6,7,8,9 交換了1次 i=7 j=array.length-1-i
代碼實現:
var temp;
var array=[9,8,7,6,5,4,3,2,1];
//外循環控制輪數
for(var i=0;i<array.length-1;i++){
//內循環控制比較次數
for(var j=0;j<array.length-1-i;j++){
if(array[j]>array[j+1]){
//交換兩個變量
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
console.log(array);
代碼優化:
var temp,bool,m=0;
var array=[9,8,7,6,5,4,3,2,1];
for(var i=0;i<array.length-1;i++){
//開閉原則中的開關
bool = true;
for(var j=0;j<array.length-1-i;j++){
if(array[j]>array[j+1]){
//交換兩個變量
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
bool=false;//將開關關閉
}
}
//如果內循環中的if沒有被執行(開關關閉,執行下面的語句);
if(bool){
break;
}
m++;
}
console.log(array+",比較"+m+"輪");
備注:比較輪數最好情況為0輪,最壞為8輪