算法入门之归并排序(自顶向下方法)
2014-05-08 23:32
162 查看
归并排序原理:
归并排序用到的是分治思想,即把一个大问题分成两个小问题,然后把一个小问题再分为两个更小的小问题,从最小的问题开始解决,然后把小问题的结果进行整合,最终解决大问题,这种思想是自顶向下的方法,特点是先进行递归,最终进行排序,在之后的快速排序中可以看到,快速排序特点是先进行排序,后进行递归
算法实现如下:
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)
归并排序用到的是分治思想,即把一个大问题分成两个小问题,然后把一个小问题再分为两个更小的小问题,从最小的问题开始解决,然后把小问题的结果进行整合,最终解决大问题,这种思想是自顶向下的方法,特点是先进行递归,最终进行排序,在之后的快速排序中可以看到,快速排序特点是先进行排序,后进行递归
算法实现如下:
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)
相关文章推荐
- 算法入门之归并排序(自底向上方法)
- [算法入门]归并排序非递归实现,大家一起来找茬啊~
- 数据结构和算法分析之排序篇--归并排序(Merge Sort)和常用排序算法时间复杂度比较(附赠记忆方法)
- 机器学习入门之四:机器学习的方法-回归算法(转载)
- 【索引】算法竞赛入门经典-第10章 数学概念与方法
- 【广告算法工程师入门 26】机制设计-考虑客户ROI的机制设计方法与实践
- 【广告算法工程师入门 38】模型特征-算法基础之最优化方法
- 挖掘算法中的数据结构(二):O(n*logn)排序算法之 归并排序(自顶向下、自底向上) 及 算法优化
- 算法竞赛入门经典:第十章 数学概念与方法 10.8约数的个数
- 算法之自顶向下的归并排序
- [算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~
- 算法第三次作业(1. 排序。对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW
- 算法代码实现之归并排序,Java实现,自顶向下与自底向上两种方式
- 算法代码实现之归并排序,Golang(Go语言)实现,自顶向下与自底向上两种方式
- 算法—4.归并排序(自顶向下)
- 图示经典算法--自顶向下的归并排序
- 算法入门学习----2.1归并排序
- 算法竞赛入门经典:第十章 数学概念与方法 10.3同余与模算术
- 12、Java入门—将一数组乱序排列的三种方法 (快速洗牌的小算法)
- Machine Learning - WEEK 1 2 3- 线性回归 、逻辑回归、梯度下降法及其优化算法、传统方法、 Octave 入门