1. 程式人生 > >PHP排序演算法之快速排序

PHP排序演算法之快速排序

原理:找到當前陣列中的任意一個元素(一般選擇第一個元素),作為標準,新建兩個空陣列left、rignt,遍歷整個陣列元素,如果遍歷到的元素比當前的元素小就放到陣列left,比當前的元素大放到rignt,然後再對新陣列進行同樣的操作。

遞迴:
遞迴是一種函式呼叫自身的機制。
遞迴必須要有邊界條件,也就是遞迴出口(退出遞迴)
遞迴前進段和遞迴返回段,也就是最後得到的值
當邊界條件不滿足時,遞迴前進;當邊界條件(遞迴出口)滿足是,遞迴返回。
PHP的遞迴非常消耗效能,儘量避免使用。

快速排序的原理複合遞迴原理
遞迴點:如果陣列元素大於1,就需要再進行分解,所以我們的遞迴點就是新構造的陣列元素個數大於1
遞迴出口:當陣列元素個數為1,不需再對新陣列進行排序。

實現程式碼:

$arr = [34,56,7,89,12,9];
function quick_sort($arr)
{


// 判斷引數是否是一個數組
if(!is_array($arr)) return false;
// 遞迴出口:陣列長度為1,直接返回陣列
$length = count($arr);
if($length <= 1) return $arr;
// 陣列元素有多個,則定義兩個陣列
$left = $right = [];
// 迴圈遍歷陣列,把第一個元素當做比較的物件
for($i=1;$i<$length;$i++)
{
    //判斷當前元素的大小
    if($arr[$i] < $arr[0])
    {
        $left[] = $arr[$i];
    }
    else
    {
        $right[] = $arr[$i];
    }
}
// 遞迴呼叫
$left = quick_sort($left);
$right = quick_sort($right);
// 將所有的結果合併
return array_merge($left,[$arr[0]],$right);

}
print_r(quick_sort($arr));

原文地址:https://segmentfault.com/a/1190000016001628