PHP排序算法之快速排序

原理:找到當前數組中的任意一個元素(通常選擇第一個元素),做爲標準,新建兩個空數組left、rignt,遍歷整個數組元素,若是遍歷到的元素比當前的元素小就放到數組left,比當前的元素大放到rignt,而後再對新數組進行一樣的操做。數組

遞歸:
遞歸是一種函數調用自身的機制。
遞歸必需要有邊界條件,也就是遞歸出口(退出遞歸)
遞歸前進段和遞歸返回段,也就是最後獲得的值
當邊界條件不知足時,遞歸前進;當邊界條件(遞歸出口)知足是,遞歸返回。
PHP的遞歸很是消耗性能,儘可能避免使用。函數

快速排序的原理複合遞歸原理
遞歸點:若是數組元素大於1,就須要再進行分解,因此咱們的遞歸點就是新構造的數組元素個數大於1
遞歸出口:當數組元素個數爲1,不需再對新數組進行排序。性能

實現代碼:ui

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

// 判斷參數是不是一個數組
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));對象

相關文章
相關標籤/搜索