首先咱們玩的是比較經典的選擇排序
選擇排序也是咱們本系列的第一個O(n^2)
算法
不少人認爲最優的算法是O(n log n)
級別的算法
O(n^2)
級別的算法?O(n^2)
相對而言比較基礎,由簡入難。不少時候咱們作項目,或者是作其餘業務的時候。咱們可能找不到最優的解決辦法,可是咱們確定會一種最簡單的辦法。咱們先將功能實現,再進行優化。可能相對而言,會有一些性能上面的問題。可是隨着咱們慢慢優化,咱們也會慢慢找到新的,更優秀的方式php
有些狀況下,咱們借用算法的思想去作項目的時候。由於自己達不到 O(n log n)
級別,那麼這個時候,咱們能夠選擇相對簡單,和容易實現的級別。如: O(n^2)
node
某些特殊狀況下,簡潔有效算法
簡單的排序算法思想,能夠衍生出複雜的排序算法。這也是我寫這個系列的緣由,可能不少人,作了好幾年的業務,也不必定用到算法。可是你的某些行爲可能偏偏就是算法思想數組
廢話很少說,直接開始了
| 7 | 2 | 1 | 5 | 4 | 6 | 9 | 3 | 8 |架構
1
1
| 5 | 4 | 6 | 9 | 3 | 8 |而後將如今的座標 1
的數值進行一次交換函數
7進行交換位置1
性能
通過這次交換後,獲得如下數據。而且 1
也是最終位置學習
| 1
| 2 | 7
| 5 | 4 | 6 | 9 | 3 | 8 |優化
2
2
| 7 | 5 | 4 | 6 | 9 | 3 | 8 |2
, 就在最終位置。咱們能夠簡單一點,直接不動2
也是最終位置2
| 7 | 5 | 4 | 6 | 9 | 3 | 8 |3
,當前位置第一是 7
7
| 5 | 4 | 6 | 9 | 3
| 8 |3
的數值進行一次交換7
進行交換位置
3
3
| 5 | 4 | 6 | 9 | 7
| 8 |4
,當前位置第一是 5
5
進行交換位置
4
4
| 5
| 6 | 9 | 7
| 8 |
/** 記錄開始時間 */
$timeStart = millisecond();
/** 生成一個 100 的隨機數組,從 1 開始到 100 */
$sort = generateSort($num,1,$num);
/** 記錄結束時間 */
$timeEnd = millisecond();
/** 結束時間 - 開始時間,之後再也不申明 */
var_dump('生成數組須要時間:'. ($timeEnd - $timeStart) . " / ms");
php
當中,while
要比 for
快一丟丟for
,多是博主不會用 while
吧/**
* 選擇排序操做方法 - for
* @param $sort
* @param $n
* @return mixed
*/
function get_select_sort_for($sort,$n){
/** 將數據循環一次 */
for($i = 0;$i < $n;$i++){
/** 尋找數據中的最小值,同時跨過第一個元素 */
for($j = $i + 1;$j < $n;$j++){
/** 經過循環對比獲得最小值 */
if($sort[$i] > $sort[$j]){
/**
* 將最小值和當前的第一個元素進行位置交換
* php 沒有位置交換的函數,因此簡單一點,先取出,再覆蓋
*/
$item = $sort[$i];
$sort[$i] = $sort[$j];
$sort[$j] = $item;
}
}
}
return $sort;
}
while
spa
/**
* 選擇排序操做方法 - while
* @param $sort
* @param $n
* @return mixed
*/
function get_select_sort_while($sort,$n){
$i = 0;
while($i < $n){
$j = $i + 1;
while($j < $n){
if($sort[$i] > $sort[$j]){
$item = $sort[$i];
$sort[$i] = $sort[$j];
$sort[$j] = $item;
}
$j++;
}
$i++;
}
return $sort;
}
/** 記錄排序開始時間 */
$sortStart = millisecond();
/** 調用上面的排序方法 */
$result = get_select_sort_for($sort,$num);
/** 記錄排序結束時間 */
$sortEnd = millisecond();
var_dump('排序耗時:'. ($sortEnd - $sortStart) . " / ms");
/** 驗證是否有序 */
$msg = isSort($result) ? 'Yes':'No';
var_dump('排序是否正確 ? :' . $msg);
var_dump('本次排序大小:'. $num);
更多學習內容請訪問: