2016-12-05 128 views
0

我试图测量PHP使用合并排序对数据进行排序所花费的时间。当我尝试10.000+数据进行排序,使用microtime(true)计算总是返回类似值:关于PHP执行时间的疑问

2.8610229492188E-6 
4.0531158447266E-6 
9.5367431640625E-7 

那不是连1秒。 PHP真的那么快吗?当我对数据进行排序时,我需要等待几秒钟,直到页面完全加载。也许我的代码有问题。

<?php$fileName = 'Ten_Thousand_Number_List.txt'; 
$fileContent = file($fileName, FILE_IGNORE_NEW_LINES); 

$timeStart = microtime(true); 

function mergeSort(&$fileContent) { 
    if (sizeof($fileContent) <= 1) { 
     return $fileContent; 
    } 

    // Split array into 2, left and right 
    $leftFrag = array_slice($fileContent, 0, (int)(count($fileContent)/2)); 
    $rightFrag = array_slice($fileContent, (int)(count($fileContent)/2)); 

    // RECURSION 
    // split the two halves into their respective halves... 
    $leftFrag = mergeSort($leftFrag); 
    $rightFrag = mergeSort($rightFrag); 

    $returnArray = merge($leftFrag, $rightFrag); 
    return $returnArray; 
} 



function merge(&$lF, &$rF) { 
    $result = array(); 
    global $numberOfComparison; 
    // while both arrays have something in them 
    while (count($lF)>0 && count($rF)>0) { 
     if ($lF[0] <= $rF[0]) { 
      array_push($result, array_shift($lF)); 
      $numberOfComparison++; 
     } 
     else { 
      array_push($result, array_shift($rF)); 
     } 
    } 

    // did not see this in the pseudo code, 
    // but it became necessary as one of the arrays 
    // can become empty before the other 
    array_splice($result, count($result), 0, $lF); 
    array_splice($result, count($result), 0, $rF); 

    return $result; 
} 

    $timeEnd = microtime(true); 
    $sortedArray = mergeSort($fileContent); 
    $memoryAllocation = memory_get_peak_usage(); 

    print_r($sortedArray); 
    echo "<br>"; 
    // echo "Time elapsed: " . $timeEnd . " " . $timeStart . "<br>"; 
    echo "Time elapsed: " . ($timeEnd - $timeStart) . "<br>"; 
    echo "Memory used: " . $memoryAllocation . "<br>"; 
?> 

回答

2

您在排序之前设置结束时间。变化:

$timeEnd = microtime(true); 
$sortedArray = mergeSort($fileContent); 

到:

$sortedArray = mergeSort($fileContent); 
$timeEnd = microtime(true); 
+0

谢谢。我想我错过了那个。 –