我正在研究排序,我已经制作了一个插入排序功能(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
如何提高插入排序功能的性能? 谢谢。
答案 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