首页 > 代码库 > 算法入门之归并排序(自顶向下方法)
算法入门之归并排序(自顶向下方法)
归并排序原理:
归并排序用到的是分治思想,即把一个大问题分成两个小问题,然后把一个小问题再分为两个更小的小问题,从最小的问题开始解决,然后把小问题的结果进行整合,最终解决大问题,这种思想是自顶向下的方法,特点是先进行递归,最终进行排序,在之后的快速排序中可以看到,快速排序特点是先进行排序,后进行递归
算法实现如下:
function less($m, $n) { return $m < $n; } function merge(&$a, $lo, $mid, $hi) { $i = $lo; $j = $mid+1; $tmp = array(); foreach ($a as $v) { $tmp[] = $v; } for($m = $lo; $m <= $hi;$m++) { if($i > $mid) $a[$m] = $tmp[$j++]; else if($j > $hi) $a[$m] = $tmp[$i++]; else if(less($tmp[$i], $tmp[$j])) $a[$m] = $tmp[$i++]; else $a[$m] = $tmp[$j++]; } } function merge_sort(&$a, $lo, $hi) { if($lo >= $hi) return; $mid = intval(($lo+$hi)/2); merge_sort($a, $lo, $mid); merge_sort($a, $mid+1, $hi); merge($a, $lo, $mid, $hi); } $a = array(7, 2, 5, 3, 8, 4, 9, 1, 6); echo "7-2-5-3-8-4-9-1-6<br/>"; merge_sort($a, 0, count($a)-1); print_r($a);输出结果:
array(1, 2, 3, 4, 5, 6, 7, 8, ,9)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。