2011-04-21 5 views
0

나는 정렬에 대해 공부와 나는 삽입 정렬 기능 (video)했습니다 :PHP 삽입 정렬 기능 성능

<?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); 
?> 

를 I했습니다 다음과 같은 결과 microtime에있어 : ​​

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

삽입 정렬 기능의 성능을 어떻게 향상시킬 수 있습니까? 감사합니다.

+0

배열이 반복되는 순서를 보장합니다. foreach *는 비 순차 순서로 요소를 반환 할 수 있습니다. –

+0

foreach의 성능이 좋지 않습니다 (http://www.phpbench.com/). 고맙습니다. – thom

+3

실제 성능에 문제가 있습니까? 실용적인 하나? phpbench는 초 단위로 백만 분의 1 초를 처리합니다. 거기에 표시된 대부분의 비교는 코드에 실제 영향을주지 않습니다. 모든 데이터베이스 요청은 수천 배나 오래 걸립니다. –

답변

3

삽입 정렬은 많은 수의 항목에 대해 매우 효율적인 알고리즘이 아닙니다.

알고리즘 자체가 느린 경우 상당한 차이를 만들 수있는 최적화가 없습니다.

mergesort 또는 quicksort 알고리즘을 사용하여 정렬을 작성하면 정렬 시간이 크게 줄어 듭니다.

+0

@thom 정렬을 연구하려면 모든 기반을 커버하고 싶습니다! – afuzzyllama

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; 
} 

사용 내 컴퓨터에서이 기능 이 촬영 만 시간은 다음과 같습니다 7.4051690101624 및 언급 기능은 위 : 21.813783884048 루프에 대한