标签:style http color io ar 数据 sp 问题 cti
归并排序是效率还是比较高的算法。其中的分治法是常用的一种解决问题的方法,现在流行的云计算其实就是一种分治法的应用。
所谓的分治法,字面解释就是“分而治之”,就是把一个复杂的问题分成两个或更多的相同或相似的子问题,直到最后子问题可以简单的直接求解,原问题的解即子问题的解的合并。这个思想在实际工作中的作用非常大,特别是处理大数据和做复杂运算的时候。
归并排序的基础是归并操作merge,即将两个有序数组合并为一个有序数组。
归并排序的算法思路为:
第一次扫描数组,将数组中相邻的两个元素merge为有序数组
第二次扫描,将相邻的有序数组再合并为更大的一个有序数组
再进行n次扫描,不断合并数组,直到排序完成
其中的归并操作merge的思路是:
设定两个指针,最初位置分别为两个已经排序序列的起始位置
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针达到序列尾
将另一序列剩下的所有元素直接复制到合并序列尾
好了我们按照上面的思路来用PHP实现归并排序算法:
<?php //归并排序算法 //首先定义归并操作merge函数 function merge($arr1,$arr2){ $arr3=array(); while(!empty($arr1) && !empty($arr2)){ $arr3[]=$arr1[0]<=$arr2[0]?array_shift($arr1):array_shift($arr2); } $arr3=array_merge($arr3,$arr1,$arr2); return $arr3; } //归并排序 function merge_sort($newarray){ if(count($newarray)<=1) return $newarray; $middle=intval(count($newarray)/2); $arr1=array_slice($newarray, 0,$middle); $arr2=array_slice($newarray, $middle); return merge(merge_sort($arr1), merge_sort($arr2)); } $arr = array(9,8,7,6,5,8,7); print_r( merge_sort($arr));
越来越发现递归算法的重要性,熟练应用递归可以解决很多实际的问题。
关于递归的理论可以参考http://www.cnsecer.com/4146.html
标签:style http color io ar 数据 sp 问题 cti
原文地址:http://blog.csdn.net/xingjigongsi/article/details/39347481