码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2015-05-19 16:33:17      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:php   归并排序   递归   合并数列   

概述

??归并排序-顾名思义通过递归合并的方式排序无序数列。归并排序是基于一种被称为“分治”(divide and conquer)的策略。
技术分享

归并排序先分解无序数列到每一个无效数列为一个元素时候,该无序数列就是有序数列,然后一步步回退合并每一个有序数列

理论

http://blog.csdn.net/morewindows/article/details/6678165
http://bubkoo.com/2014/01/15/sort-algorithm/merge-sort/
http://flyingcat2013.blog.51cto.com/7061638/1281026

动画

技术分享

代码(PHP)

1.合并两个有序数列的函数

//将有二个有序数列$arr1,$arr2合并。
function mergeArray($arr1,$arr2){
    $i=0;
    $j=0;
    $arr1_length = count($arr1);
    $arr2_length = count($arr2);
    $temp =array();
    while($i < $arr1_length && $j < $arr2_length){
        if($arr1[$i] < $arr2[$j]){
            $temp[] = $arr1[$i++];
        }else{
            $temp[] = $arr2[$j++];
        }
    }
    while($i<$arr1_length){
        $temp[] = $arr1[$i++];
    }
    while($j<$arr2_length){
        $temp[] = $arr2[$j++];
    }
    return $temp;
}

2.递归实现分解任务

//递归分解任务
function mergeSort($arr,$last,$first=0){
    if($first < $last){
        $mid = (int)(($first+$last)/2);
        $arr_left  = mergeSort($arr,$mid,$first);
        $arr_right = mergeSort($arr,$last,$mid+1);
        return mergeArray($arr_left,$arr_right);
    }
    return array($arr[$first]);
}

3.调用

$item =array(‘2‘,‘1‘,‘4‘,‘3‘,‘8‘,‘6‘,‘5‘,‘-1‘,‘10‘,‘3‘,‘7‘,‘6‘,‘6‘);
var_dump(implode(‘,‘,$item));
var_dump(implode(‘,‘,mergeSort($item,count($item)-1)));

结果

技术分享

归并排序

标签:php   归并排序   递归   合并数列   

原文地址:http://blog.csdn.net/pursuing0my0dream/article/details/45845721

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!