大O符號:order,譯爲階,也能夠理解爲數量級。
php
每一輪排序找到最大的值,放在數組的最後,而且,排好序的數再也不參與下一輪的排序;算法
每一輪的排序規則是:每次從第一個數開始,與其右邊的數進行比較,大的值放到右邊,右邊的值再依次往下進行比較,直到進行到未排序數的最後一個數爲止;數組
排序的結束:當未排序的數只有一個時,就完成了排序。函數
數組長度:length function bubble_sort(&$a){ $i從0到length-1 $j從0到length-1-$i //$i表示通過$i次循環後已排好序的個數,length-1-$i表示對未排序的數進行排序 //對$a[$j]和$a[$j+1]排序 //隨着$j遞增,較大的數參與下一次排序,直到比較到最後一個未排序數 若是$a[$j]>$a[$j+1],交換兩數值
<?php //兩數交換的函數 function swap(&$x,&$y){ $t = $x; $x = $y; $y = $t; } function bubble_sort(&$a){ $i; $j; $len = count($a); for($i = 0;$i < $len-1;$i++) for($j = 0;$j < $len - 1 - $i;$j++) if($a[$j] > $a[$j+1]) swap($a[$j],$a[$j+1]; } $arr = array(4,8,1,9,3,7,6,2); bubble_sort($arr); print_r($arr);
冒泡排序是與插入排序擁有相等的運行時間,可是兩種算法在須要的交換次數卻很大地不一樣。在最好的狀況,冒泡排序須要O(n^2)次交換,而插入排序只要最多O(n)交換。spa
最易理解,實現最簡單,可是對於少數元素以外的數列排序是很沒有效率的。code
參考:https://zh.wikipedia.org/wiki/%E5%86%92%E6%B3%A1%E6%8E%92%E5%BA%8F排序