PHP插入排序功能性能

时间:2011-04-21 21:26:43

标签: php arrays performance sorting

我正在研究排序,我已经制作了一个插入排序功能(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

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

2 个答案:

答案 0 :(得分:3)

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

如果算法本身很慢,那么你可以采取一些优化措施来实现显着差异。

使用mergesort或quicksort alogrithm编写您的排序,您的排序时间将会大大减少。

答案 1 :(得分:1)

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