氣泡排序是乙個常見的排序演算法,它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。
對於氣泡排序,大家估計都不陌生,工作原理如下:
1、比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。
2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
3、針對所有的元素重複以上的步驟,除了最後乙個。
4、持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
例如常見的氣泡排序:
/**
* 氣泡排序
**/function main($array)
} }return $array;
}$array = array(1, 4, 3, 6, 2, 5);
print_r(main($array));
?>
下面對其進行優化,設定乙個標誌,如果這一趟發生了交換,則為true,否則為false。明顯如果有一趟沒有發生交換,說明排序已經完成。
<?php
/** * 氣泡排序
**/function main($array)
} $length--;
} return $array;
}$array = array(1, 4, 3, 6, 2, 5);
print_r(main($array));
?>
再做進一步的優化。如果有50個數的陣列,僅前面10個無序,後面40個都已排好序且都大於前面10個數字,那麼在第一趟遍歷後,最後發生交換的位置必定小於10,且這個位置之後的資料必定已經有序了,記錄下這位置,第二次只要從陣列頭部遍歷到這個位置就可以了。
<?php
/** * 氣泡排序
**/function main($array)
} }return $array;
}$array = array(1, 4, 3, 6, 2, 5);
print_r(main($array));
?>
PHP 氣泡排序以及優化
最近看了一下氣泡排序這個經典的演算法,在網上也看到了很多改進氣泡排序演算法的方式,這裡總結一下 氣泡排序最簡單的實現方式如下 我用php來實現,用其他語言也是一樣的 for i 0 i arr count i 例如 3 1 4 5 6 7 8 9 10 11 針對這個陣列我們按照基本氣泡排序演算法,...
PHP之氣泡排序
昨天去酷狗面試的時候,在筆試那一關,有道要求用php實現氣泡排序的程式設計題,因為實在太久沒用過氣泡排序,忘記了演算法的原理,結果留了空白,實在無語。因此今天把php的氣泡排序 記錄一下 氣泡排序 param array numbers 要排序的陣列,只限數字一維陣列 param boolean a...
排序演算法之 氣泡排序優化
氣泡排序優化演算法思想 我們通過在程式定義了乙個bool型別的flag變數,用來判斷往後的迴圈當中,陣列是否已經是有序的,每一輪迴圈都會設定其值為true,當有元素對調位置時,就將flag的值設定為true,表示該陣列還不是有序陣列。每一輪都要判斷flag的值,如果判斷當前一輪操作沒有元素有位置調換...