這個算法的名字由來是因為越大的元素會經(jīng)由交換慢慢“浮”到數(shù)列的頂端祟绊,故名弓叛。
冒泡排序算法的運作如下:(從后往前)
比較相鄰的元素。如果第一個比第二個大灾茁,就交換他們兩個窜觉。
對每一對相鄰元素作同樣的工作谷炸,從開始第一對到結(jié)尾的最后一對。在這一點禀挫,最后的元素應該會是最大的數(shù)旬陡。
針對所有的元素重復以上的步驟,除了最后一個特咆。
持續(xù)每次對越來越少的元素重復上面的步驟季惩,直到?jīng)]有任何一對數(shù)字需要比較录粱。
$arr=array(5,1,0,3,9,10,59,41,78,56,45,47,12,15,45,11);
bubbleSort($arr);
var_dump($arr);
// 從后往前冒
function bubbleSort(&$arr){
$size = count($arr);
for($i = 0; $i < $size; $i++){
for($j = $size - 1; $j > $i; $j--){
if($arr[$j-1] < $arr[$j]){
swap($arr,$j-1,$j);
}
}
}
}
// 從前往后冒
function bubbleSort(&$arr){
$size = count($arr);
for($i = 0; $i < $size; $i++){
for($j = 0; $j < $size - 1 - $i; $j++){
if($arr[$j] > $arr[$j+1]){
swap($arr,$j,$j+1);
}
}
}
}
function swap(&$arr,$a,$b){
# code...
$temp = $arr[$a];
$arr[$a] = $arr[$b];
$arr[$b] = $temp;
}