1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| <?php function merger_sort(&$arr,$frist,$end) { if($frist < $end) { $middle = floor(($frist+$end)/2); merger_sort($arr,$frist,$middle); merger_sort($arr,$middle+1,$end); merger($arr,$frist,$middle,$end); } } function merger(&$arr,$start,$mid,$end) { $i = $start; $j=$mid + 1; $k = $start; $temparr = array();
while($i!=$mid+1 && $j!=$end+1) { if($arr[$i] >= $arr[$j]){ $temparr[$k++] = $arr[$j++]; } else{ $temparr[$k++] = $arr[$i++]; } } while($i != $mid+1){ $temparr[$k++] = $arr[$i++]; }
while($j != $end+1){ $temparr[$k++] = $arr[$j++]; } for($i=$start; $i<=$end; $i++){ $arr[$i] = $temparr[$i]; } }
function MergeSort(&$arr){ $start = 0; $end = count($arr) - 1; merger_sort($arr,$start,$end); } $array = array(5,2,7,4); MergeSort($array); var_dump($array);
|