原理: 分两部分,递归合并。
function merge_sort(&$a,$left,$right,&$b){ if($left>=$right) return ; $mid = ($left+$right)/2; $mid = intval($mid); //递归 merge_sort($a,$left,$mid,$b); merge_sort($a,$mid+1,$right,$b); //回溯,合并 $l = $left; $r = $mid+1; $t = $left; while($l<=$mid && $r<=$right){ if($a[$l]>$a[$r]) $b[$t++] = $a[$l++]; else $b[$t++] = $a[$r++]; } while($l<=$mid){ $b[$t++] = $a[$l++]; } while($r<=$right){ $b[$t++] = $a[$r++]; } //将已有序的元素复制到元数组 for($i=$left;$i<=$right;$i++){ $a[$i] = $b[$i]; } return ; } $a = array(5,4,0,123,333,1); $cnt = count($a); $b = array(); merge_sort($a,0,$cnt-1,$b); var_dump($a);