1.快速排序(遞歸)php
實現思路:以$arr=[29,3,44,6,77,56,22,2223,33]數組爲例,以數組的第一個元素爲參照,小於等於他的元素歸爲$minArr=[3,6,22],大於他的元素歸爲$maxArr=[44,77,56,2223,33];最後返回數據應該是 $minArr ,$arr[0],$maxArr組成,若是數組只有一個或者少於一個元素,則直接返回這個數組;再用一樣的方法去排序$minArrr和$maxArr.代碼以下:算法
/** * 快速排序(遞歸方法實現) * @param type $arr */ function meSort($arr) { // 獲取數組元素個數 $len = count($arr); // 遞歸出口:若是數組元素少於等於一個,則直接返回 if($len <= 1)return $arr; // 以數組第一個元素爲參照元素 $mid = $arr[0]; // 小於等於參照元素的數組元素 $minArr = []; // 大於參照元素的數據元素 $maxArr = []; // 找出$minArr 和 $maxArr for($i=1;$i<$len;++$i){ if($arr[$i]<=$mid){ $minArr[] = $arr[$i]; }else{ $maxArr[] = $arr[$i]; } } // 返回且合併 $minArr 和 $mid 和 $maxArr;以一樣的方法去排序 $minArr 和 $maxArr return array_merge(meSort($minArr),[$mid],meSort($maxArr)); }
這種排序方法適合須要排序的數組元素個數沒有那麼多,若是數組元素個數過多,遞歸的次數就會越多,效率會越慢.數組
2.冒泡排序code
實現思路:以$arr=[29,3,44,6,77,56,22,2223,33]數組爲例,從第一個元素開始和他的後一個元素進行比較,若是他的後一個元素比他小,則二者交換位置,以此類推,代碼以下:排序
<?php /** * PHP經典排序算法 - 冒泡排序 * $arr array 須要排序的數組 */ function meSort($arr) { // 計算數組的元素個數 $len = count($arr); // 若是數組元素個數小於等於一個 則直接返回數組 if($len <= 1)return $arr; // 外層循環 控制須要排序的元素個數 for($i = 0;$i < $len;++$i){ //內層循環 控制每次循環的目標元素(最大的元素) for($j = 0;$j < $len-1-$i; ++$j){ // 元素交換位置 尋找出本輪最大的元素 if($arr[$j] > $arr[$j+1]){ $tem = $arr[$j + 1]; //交換位置 $arr[$j + 1] = $arr[$j]; $arr[$j] = $tem; } } } // 返回結果 return $arr; }
這種排序算法比較常見,適用範圍廣。遞歸