冒泡排序經典的排序算法,實現的思想是經過兩兩相鄰的元素比較,使較大的數字不斷向隊列上部浮動,就如同水裏的一個氣泡通常不斷向上浮,因此才獲得一個"冒泡排序"好聽的名字。javascript
那接下來我經過一個小例子來看看冒泡排序的實現:
html
[7,4,1,8,2]
上面的數組實現從小到大排序。java
由於冒泡排序是兩兩相鄰比較,因此
算法
step1 7與4比較,7>4,交換位置後得數組:[4,7,1,8,2] step2 7與1比較,7>1,交換位置後得數組:[4,1,7,8,2] step3 7與8比較,7<8,不進行交換得數組:[4,1,7,8,2] step4 8與2比較,8>2,交換位置後得數組:[4,1,7,2,8]
至此第一輪冒泡結束,咱們看到數組中元素最大的8已經到了最後,這就是通過一輪冒泡,最大的元素已經浮動到最上面。以後只要重複這4個步驟就能夠了。數組
可是這個沒經優化的冒泡排序的時間複雜度是O(N2)。ide
優化的思想就是:若是數組中某個元素到最後一個元素是已經排好序的,那麼這段數據就不須要進行比較並排序了。優化
[2,1,4,5,6,7,8]
像這個數組中,[4,5,6,7,8]是已經排好序的,只須要排[2,1]就ok。spa
代碼以下:orm
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>冒泡排序</title> <script type="text/javascript"> function myclick(){ var value = document.getElementById("sort_array").value; var array = value.split(","); document.getElementById("echo_array").value = mysort(array).toString(); } //排序算法 function mysort(arr){ var i,flag = 1,temp,j=arr.length; while(flag){ flag = 0;//每次數組的循環以前置爲0 for(i=1;i<j;i++){ if(parseInt(arr[i])>parseInt(arr[i-1])){ temp = arr[i]; arr[i] = arr[i-1]; arr[i-1] = temp; flag = 1;//標誌位,若是有交換則置爲1 } } j = i;//記錄最後一次交換的數組下標 } return arr; } </script> <style type="text/css"> input{ width: 300px; } </style> </head> <body> <label>請輸入待排序的數字,用逗號隔開:</label><input type="text" id="sort_array"/> <label>請輸入待排序的數字,用逗號隔開:</label><input type="text" id="echo_array"/> <input type="button" value="排序" onclick="myclick()"/> </body> </html>
這樣通過優化過的算法最好的時間複雜度是O(n),最壞的狀況下仍是O(N2)