所謂的冒泡排序,其實指的是對數組中的數據進行排序,按照從小到大的順序來進行排列.
它重復地走訪過要排序的元素列,依次比較兩個相鄰的元素,如果他們的順序(如從大到小、首字母從A到Z)錯誤就把他們交換過來。走訪元素的工作是重復地進行直到沒有相鄰元素需要交換,也就是說該元素列已經排序完成。
這個算法的名字由來是因為越大的元素會經由交換慢慢“浮”到數列的頂端(升序或降序排列),就如同碳酸飲料中二氧化碳的氣泡最終會上浮到頂端一樣,故名“冒泡排序”。
生活原理:假設小明是最矮的;然后通過比較,發現二狗要比小明矮,就和小明換位置,兩兩比較,通過第一次比較可以找出二狗是最矮的人,
然后假設隊伍的第二個人是最矮的,讓他和剩下的人比較身高,依次找出其他人的位置。
js思路:假想數組中的任意一個值是最小;然后通過比較兩兩比較,找出索引值,換位,然后賦值。
// 數組的冒泡排序 var arr = [10,3,4,2,32,43,100,99]; maoPao(arr); // 希望對上面的數組進行冒泡排序的處理 // 將兩個值進行對比 function maoPao(arr) { var flag = 1; // 用來標記某一次排序是否發生交換 for(var i =0;i<arr.length-1;i++) { flag = 0; // 設置為0表示沒有發生交換
for (var j =0;j < arr.length-i-1;j++){
//
arr.length - i - 1相當於 arr.length - (i + 1 ),
/**為什么設置這個命令?因為第一次循環數組的最后一位已經確定了,
第二次循環
數組的倒數第二位也確定,
以此類推.*/
//var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp;相當於把數組[j]數據賦值給
變量temp,然后把
等於
數組[j+1]
的值賦值給數組[j],
//再把temp
值賦值給數組[j+1],此時
數組[j]和
數組[j+1]的值已經發生了改變
if (arr[j] > arr[j+1]) { // 進行交換 var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; flag = 1; // 設置為1 表示本次循環發生了交換 } } console.log(arr); // 每次都輸出一下數組 if(flag === 0) break; // 如果沒有發生改變,則停止循環 } }