归并排序-PHP版

Posted Gabriel

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了归并排序-PHP版相关的知识,希望对你有一定的参考价值。

最新在学习算法与数据结构,2018年初的买的课程,到2020年初才开始看。因为自己的半路才出来学习的,之前重来都不懂算法和数据结构,也不明白为什么算法和数据结构是一起的。开始学这门课后,才知道,算法是数据结构优化,数据-结构(存储数据的方式)是相铺相成的。为什么mysql-存储引擎为Innodb,存储索引的结构为B+数呢?数组,二叉树,堆又有什么作用呢?

代码如下:

<?php
function mergeSort(&$array,$left,$right) {
    if ($left >= $right) {
        return;
    };
    $middle = floor(($right+$left)/2);
    mergeSort($array,$left,$middle);
    mergeSort($array,$middle+1,$right);
    merge($array,$left,$middle,$right);
}


function merge(&$array,$left,$middle,$right) {
    $tempArr = [];
    for($i = $left;$i<=$right;$i++) {
        $tempArr[$i-$left] = $array[$i];
    }
    $i = $left;
    $j = $middle + 1;
    for($k=$left;$k<=$right;$k++) {
        if ($i > $middle) {
            $array[$k] = $tempArr[$j-$left];
            $j++;
        } elseif ($j>$right) {
            $array[$k] = $tempArr[$i-$left];
            $i++;
        } elseif($tempArr[$i-$left] > $tempArr[$j-$left]) {
            $array[$k] = $tempArr[$j-$left];
            $j++;
        } else {
            $array[$k] = $tempArr[$i-$left];
            $i++;
        }
 }}

function makeArray($n) {
    $array = [];
    for ($i = 0;$i<$n;$i++) {
        $array[$i] = mt_rand(0,$n);
    }
    return $array;
}

$array = makeArray(100);
mergeSort($array,0,count($array)-1);
echo implode(",",$array);

需要解释几个参数:
middle:相当于一个数组,每次从数组的中间分开。
tempArr:合并的时候,需要复制出一个相同空间大小的数组
i:数组中被分开的左边的值
j:数组中中间的第一个值

以上是关于归并排序-PHP版的主要内容,如果未能解决你的问题,请参考以下文章

归并排序--详细解释版

算法(第4版)-2.2 归并排序

Java版算法思想(排序)插入&希尔&归并

Java版算法思想(排序)插入&希尔&归并

PHP教程:详解PHP归并排序的实现

归并排序的java实现