PHP排序之歸併排序

/**
 * @author beggar [email protected]
 * @param type $arr
 * @param type $begin
 * @param type $end
 */
function mergeSort(&$arr, $begin, $end){
    if(!empty($arr) && $begin < $end){
        $middle = (int)(($begin + $end)/2);
        mergeSort($arr, $begin, $middle);
        mergeSort($arr, $middle+1, $end);
        merge($arr, $begin, $middle, $end);
    }
}
function merge(&$arr, $begin, $middle, $end){
    $left = array();
    $right = array();
    for($i=$begin; $i<=$middle; $i++){
        $left[] = $arr[$i];
    }
    for($j=$middle+1; $j<=$end; $j++){
        $right[] = $arr[$j];
    }
    $left[] = 99999999;
    $right[] = 99999999;
    $i = 0;
    $j = 0;
    for($k=$begin; $k<=$end; $k++){
        if($left[$i] > $right[$j]){
            $arr[$k] = $right[$j];
            $j++;
        }else{
            $arr[$k] = $left[$i];
            $i++;
        }
    }
}
$arr = array(7, 8, 1, 4, 5, 9, 6);
mergeSort($arr, 0, 6);
print_r($arr);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章