PHP - ソートの比較

PHPってインタプリタだけどソートのアルゴリズムを比較してみる。PHPでやるのはお勧めしない!

実行結果(レンタルサーバでは負荷をかけられないので自宅の Mac OS X で実行)

Bubble Sort: 0.0016670227050781 s
Quick Sort:  0.00027203559875488 s

ソースコード

<?php
$aryData1 
= array(
    
512,  4,  218,  8,  2,  73172,
    
833,  07338668810,  556,
    
4228951729819195326,
    
0794470151728,  97115,
    
2236192682340,  387,  7,
    
75957852046602192,  8,
    
9936430,  5,  0,  5801246,
    
68411,  6473999372996,
    
314,  966586913591813,
    
1422676557720352364,
);
$aryData2 = array(
    
512,  4,  218,  8,  2,  73172,
    
833,  07338668810,  556,
    
4228951729819195326,
    
0794470151728,  97115,
    
2236192682340,  387,  7,
    
75957852046602192,  8,
    
9936430,  5,  0,  5801246,
    
68411,  6473999372996,
    
314,  966586913591813,
    
1422676557720352364,
);

$iStart microtime(true);
bsort($aryData1);
$iEnd   microtime(true);
fputs(STDERR"Bubble Sort: ".($iEnd $iStart)." s\n");

$iStart microtime(true);
qsort($aryData20count($aryData2)-1);
$iEnd   microtime(true);
fputs(STDERR"Quick Sort:  ".($iEnd $iStart)." s\n");

//print_r($aryData1);
//print_r($aryData2);

/**
 * Bubble Sort
 */
function bsort(&$aryData)
{
    
$iCount count($aryData) - 1;
    for (
$i=0$i<$iCount$i++) {
        for (
$j=0$j<$iCount-$i$j++) {
            if (
$aryData[$j] > $aryData[$j+1]) {
                
swap($aryData[$j], $aryData[$j+1]);
            }
        }
    }
}

/**
 * Quick Sort
 */
function qsort(&$aryData$iLeft$iRight) {
    
$pivot $aryData[$iLeft];
    
$i $iLeft;
    
$j $iRight;
    while(
1) {
        while(
$aryData[$i] < $pivot) {
            
$i++;
        }
        while(
$pivot $aryData[$j]) {
            
$j--;
        }
        if (
$i >= $j) {
            break;
        }
        
swap($aryData[$i], $aryData[$j]);
        
$i++;
        
$j--;
    }
    if (
$iLeft < ($i 1)) {
        
qsort($aryData$iLeft$i-1);
    }
    if ((
$j 1) < $iRight) {
        
qsort($aryData$j+1$iRight);
    }
}

function 
swap(&$a, &$b) {
    
$tmp $a;
    
$a $b;
    
$b $tmp;
}

?>