算法:假設有n個人排成一行,每人手里都有一個數字,第一個人跟后一個人說你手里的數學比我小(大)嗎?回答說小,兩個人就互換了位置,一隊下來是n-1次比較,
最終使得最后一個人手里的數字是最小(大)的。即 每一小循環(輪)確定一個最小或最大的數!
代碼: 假設,總比較數量有s個數,當輪要比較數n=(s-i)個,則得比較s-1輪(外層循環),每輪比較n-1次(內層循環)
var arr=[311,42,33,5,21,6,7,312];
console.log(arr);
for (var i=0;i<arr.length-1;i++){ // 輪:s-1輪
for (var j=0;j<arr.length-i-1;j++){ //比較次數: (s-i)-1比較次數
if(arr[j]>arr[j+1]){//交換邏輯
var sub=arr[j+1];
arr[j+1]=arr[j];
arr[j]=sub;
}
}
}
console.log(arr);
點擊查看代碼