分治排序

归并排序

时间复杂度O(NlgN)

分治法解题的一般步骤:

(1)分解,将要解决的问题划分成若干规模较小的同类问题;

(2)求解,当子问题划分得足够小时,用较简单的方法解决;

(3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的解。

 

http://www.cnblogs.com/Creator/archive/2011/06/18/2084267.html

<?php
function t_sort(&$arr,$start,$end){
    if($start<$end){
        $mid=intval(($start+$end)/2);
        t_sort($arr,$start,$mid);
        t_sort($arr,$mid+1,$end);
        merge_sort($arr,$start,$mid,$end);
    }
}
function merge_sort(&$arr,$start,$mid,$end){
    for($i=$start;$i<=$mid;$i++){
        $arrA[]=$arr[$i];
    }
    for($j=$mid+1;$j<=$end;$j++){
        $arrB[]=$arr[$j];
    }
    $i=0;$j=0;$k=0;
    while($i<count($arrA)&&($j<count($arrB))){
        if($arrA[$i]<=$arrB[$j]){
            $arr[$start+$k]=$arrA[$i];
            $i++;
        }
        else{
            $arr[$start+$k]=$arrB[$j];
            $j++;
        }
        $k++;
    }
    while($i<count($arrA)){
        $arr[$start+$k]=$arrA[$i];
        $i++;
        $k++;
    }
    while($j<count($arrB)){
        $arr[$start+$k]=$arrB[$j];
        $j++;
        $k++;
    }
}
$arr=array(2,1,3,4,5,10,9,7,8,3,2,12,4,5);
t_sort($arr,0,count($arr)-1);
print_r($arr);

 

原文地址:https://www.cnblogs.com/bugY/p/2383008.html