php实现 归并排序,快速排序

归并排序

归并排序采用分治,递归思想。先将数据从中间分开,分成两个部分。然后前后两部分分别排序(继续分,直至最后只有一个数),再合并,排序完成。

$array = [5,4,6,9,1,4,4,9];
function sortd($array){
    if (count($array)>1) {
        $num = count($array);
        $middle = floor($num/2);
        $arrLeft= array_slice($array, 0, $middle);
        $arrRight= array_slice($array, $middle);
        return merge(sortd($arrLeft), sortd($arrRight));
    } else {
        return $array;
    }
}

function merge($array1, $array2) {
    $newArray = [];
    $index1 = 0;
    $index2 = 0;
    $num1 = count($array1);
    $num2 = count($array2);
    while ($index1<$num1 && $index2<$num2) {
        $newArray[] = $array1[$index1]>$array2[$index2]?$array1[$index1++]:$array2[$index2++];
    }
    for ($index1; $index1<$num1; $index1++) {
        $newArray[] = $array1[$index1];
    }
    for ($index2; $index2<$num2; $index2++) {
        $newArray[] = $array2[$index2];
    }
    return $newArray;
}

快速排序

快速排序也是采用分治和递归思想;将数据找出一个数,将比小的放在一边,比他大的放在另一边这个数放中间。然后这两个区域重复上一步操作,直到两边的数剩下一个数,排序完成。

function quickSort($arr){
    $num = count($arr);
    if ($num <= 1) {
        return $arr;
    }
    $middle = $arr[0];
    $leftArray = array();
    $rightArray = array();

    for ($i = 1; $i < $num; $i++) {
        if ($arr[$i] < $middle) {
            $rightArray[] = $arr[$i];
        } else {
            $leftArray[] = $arr[$i];
        };
    }
    $leftArray = quickSort($leftArray);
    $leftArray[] = $middle;

    $rightArray = quickSort($rightArray);
    return array_merge($leftArray, $rightArray);
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
jiangjun
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!