PHP实现归并排序法
时间:2015-09-05 阅读:次 QQ群:182913345
通过这张图,很直观,一看就能明白归并排序法这个算法的思路:图下。
/* *Author:www.php520.cn *Time:2015-09-05 *Note:归并排序算法PHP实现 */ //归并排序算法PHP实现 $dst_array=array(26,5,7,9,4,2,8,11,25,89,56,35,56,14,18,23,16,19,34,3,17,99,49, 22,108,25,104,13,50); function mergerSort($array){ //计算数组的长度 $leng=count($array); //限制如果此数组只有1个元素时,则不再排序 if($leng==1) return $array; //对数组取中 $middle=intval($leng/2); //将数组切分成前后两部分 $frontArr=array_slice($array,0,$middle); $behindArr=array_slice($array,$middle); //递归每部分的数组切分至最小单元后进行处理返回 $frontArr=mergerSort($frontArr); $behindArr=mergerSort($behindArr); //对前后两个已经排好了序的数据,哪个更小就将哪个插入新的数组。 $newArr=array(); while($frontArr && $behindArr){ $newArr[]=$frontArr[0]<$behindArr[0]?array_shift($frontArr):array_shift($behindArr); } //可能前台数组个数差异及排列问题出现一个数组为空时,另一个数组尚不为空。需要将两数组合并 return array_merge($newArr,$frontArr,$behindArr); } $t=mergerSort($dst_array); print_r($t); |
下一篇:PHP设计模式:单例模式