【问题标题】:PHP Insert Sort function performancePHP插入排序函数性能
【发布时间】:2011-04-21 21:26:43
【问题描述】:

我正在研究排序,我做了一个插入排序功能(video):

<?php
set_time_limit(null);

function insertSort(array &$array)
{
    $array_size = count($array);
    $tmp = null;
    for ($i = 0; $i < $array_size; $i++)
    {
        $j = $i + 1;
        if ($j == $array_size)
        {
            break;
        }
        while ($array[$j] < $array[$i])
        {
            $tmp = $array[$i];
            $array[$i] = $array[$j];
            $array[$j] = $tmp;

            if ($i > 0)
            {
                $i--;
            }
            $j--;
        }
    }
}

$array = range(0, 100);
shuffle($array);//array(3, 0, 1, 8, 7, 2, 5, 4, 9, 6);

$time_start = microtime(true);
insertSort($array);
$time_end = microtime(true);
echo ($time_end - $time_start);
?>

我用 microtime 得到了以下结果:

10000 integers - 69.174551010132
5000 integers - 16.151810884476
1000 integers - 0.7065761089325
500 integers - 0.18473505973816
100 integers - 0.0077528953552246

如何提高插入排序功能的性能? 谢谢。

【问题讨论】:

  • for循环保证了数组的迭代顺序。 foreach 可能按非顺序返回元素。
  • foreach 性能不佳:phpbench.com。谢谢。
  • 您真的有实际性能问题吗?实用的?请注意,phpbench 以微秒为单位进行处理 - 百万分之一 秒。显示的大多数比较不会对代码产生任何实际影响。您发出的每个数据库请求都将花费数千倍的时间。
  • 其实没有。我只是在学习。谢谢。
  • 使用mysql可能会更好。

标签: php arrays performance sorting


【解决方案1】:

对于大量项目,插入排序不是一种非常有效的算法。

这里的要点是,如果算法本身很慢,您无法进行任何优化来产生显着差异。

使用合并排序或快速排序算法编写您的排序,您的排序时间将大大减少。

【讨论】:

  • @thom 如果你想学习排序,你想覆盖你所有的基础!
【解决方案2】:
function insertionSort($array){
    $length = count($array);

    for($j=1;$j<$length;$j++){
        $key = $array[$j];
        $i=$j-1;
        while($i>=0 && $array[$i]>$key){
            $array[$i+1]=$array[$i];
            $array[$i]=$key;
            $i--;
        }
    }
    return $array;
}

使用这个功能 在我的机器上:10000 所花费的时间是:7.4051690101624 和 上面提到的函数是:21.813783884048

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    相关资源
    最近更新 更多