PHP和C++差距还真大

来源:3-2 归并排序法的实现

慕娘8501819

2018-09-27

<?php
function __merge($list, $l, $mid, $r)
{
    $tmp = array();
    for ($i = $l; $i <= $r; $i++) {
        $tmp[$i - $l] = $list[$i];
    }
    $i = $l;
    $j = $mid + 1;
    for ($k = $l; $k <= $r; $k++) {
        if ($i > $mid) {
            $list[$k] = $tmp[$j - $l];
            $j++;
        } else if ($j > $r) {
            $list[$k] = $tmp[$i - $l];
            $i++;
        } else if ($tmp[$i - $l] < $tmp[$j - $l]) {
            $list[$k] = $tmp[$i - $l];
            $i++;
        } else {
            $list[$k] = $tmp[$j - $l];
            $j++;
        }
    }
    unset($tmp);
    return $list;
}

function __mergesort($list, $l, $r)
{
    if ($l >= $r) return '';
    $mid = floor(($l + $r) / 2);
    $rs = __mergesort($list, $l, $mid);
    if(!empty($rs)){
        $list = $rs;
    }
    unset($rs);
    $rs = __mergesort($list, $mid + 1, $r);
    if(!empty($rs)){
        $list = $rs;
    }
    unset($rs);
    $list = __merge($list, $l, $mid, $r);
    return $list;
}

function mergesort($list, $n)
{
    return __mergesort($list, 0, $n - 1);
}

function getrandlist($n)
{
    $list = array();
    for ($i = 0; $i < $n; $i++) {
        $list[$i] = rand();
    }
    return $list;
}

$n = 50000;
$a = getrandlist($n);
//var_dump($a);

echo "<br/>";
echo date('Y-m-d H:i:s.u');
echo "<br/>";
$list = mergesort($a, $n);
unset($a);
unset($list);
echo date('Y-m-d H:i:s.u');
echo "<br/>";

PHP在我电脑上运行5000数据量已经3s了,和c++50000数据量下2s的差距真大…
不知道我这样写是否有错呢?

写回答

1回答

liuyubobobo

2018-09-27

是的哦:)脚本语言就是这么慢!可以参考这个问答:http://coding.imooc.com/learn/questiondetail/4984.html


具体你的代码我就不看啦。我本身对PHP也不熟悉。可以自己像课程中的方式一样,自己创建随机数据进行测试哦:)


加油!:)

0
0

算法与数据结构(C++版) 面试/评级的算法复习技能包

课程专为:短时间内应对面试、升职测评等艰巨任务打造

11186 学习 · 1614 问题

查看课程