算法入门之归并排序(自底向上方法)
2014-05-08 23:41
281 查看
与上一篇的自顶向下方法相反,我们直接从最小的问题开始解决,最终大问题迎刃而解
实现如下:
其中只有merge_sort改变了
输出结果:
array(1, 2, 3, 4, 5, 6, 7, 8, 9);
实现如下:
其中只有merge_sort改变了
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) { $len = count($a); for($i = 2; $i < $len*2; $i = $i*2) { //先从2个元素开始排序,即11合并;然后22合并,以此类推 for($j = 0; $i*$j < $len; $j++) { merge($a, $i*$j, $i*$j+intval(($i-1)/2), min(array($i*$j+$i-1, $len))); } } } $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);
相关文章推荐
- 算法入门之归并排序(自顶向下方法)
- 算法之自底向上的归并排序
- Machine Learning - WEEK 1 2 3- 线性回归 、逻辑回归、梯度下降法及其优化算法、传统方法、 Octave 入门
- 经典算法之归并排序的C实现方法
- 机器学习入门之四:机器学习的方法-回归算法(转载)
- 算法第三次作业(1. 排序。对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW
- 挖掘算法中的数据结构(二):O(n*logn)排序算法之 归并排序(自顶向下、自底向上) 及 算法优化
- [算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~
- 自底向上的归并排序-转自算法C语言实现
- 算法代码实现之归并排序,Java实现,自顶向下与自底向上两种方式
- 【广告算法工程师入门 38】模型特征-算法基础之最优化方法
- 图示经典算法--自底向上的归并排序
- 数据结构和算法分析之排序篇--归并排序(Merge Sort)和常用排序算法时间复杂度比较(附赠记忆方法)
- [算法入门经典] 8.2 归并排序
- 【广告算法工程师入门 27】机制设计-考虑用户体验的机制设计方法与实践
- 12、Java入门—将一数组乱序排列的三种方法 (快速洗牌的小算法)
- 算法代码实现之归并排序,Golang(Go语言)实现,自顶向下与自底向上两种方式
- 算法系列—自底向上归并排序
- 机器学习入门之四:机器学习的方法--其它算法(转载)
- 算法竞赛入门经典:第十章 数学概念与方法 10.8约数的个数