七大排序问题之归并排序(PHP版)

来源:互联网 发布:java中getresource方法 编辑:程序博客网 时间:2024/06/06 03:25
<?php    $arr=array("1","5","9","6","8","2","3","4","7");        function  merge(&$array,$p,$q,$r){    $n1=$q-$p+1;    $n2=$r-$q;        for($i=0;$i<$n1;$i++){    $L[$i]=$array[$p+$i];    }    for($j=0;$j<$n2;$j++){    $R[$j]=$array[$q+$j+1];    }        $L[$n1]=999;        $R[$n2]=999;    $i=0;$j=0;        for($k=$p;$k<=$r;$k++){    if($L[$i]<$R[$j]){    $temp=$L[$i];    $i++;    }    else{    $temp=$R[$j];    $j++;    }    $array[$k]=$temp;    }    dispalay($array);    }function  mergeSort(&$array,$p,$r){if($p<$r){$q=floor(($p+$r)/2);mergeSort($array,$p,$q);mergeSort($array,$q+1,$r);merge($array,$p,$q,$r);}}    function dispalay(&$arr)    {        for($i=0;$i<count($arr);$i++)            echo $arr[$i].":";        echo "\n";    }    mergeSort($arr, 0, count($arr)-1);    //dispalay($arr)."<br>";

输出结果为:

1:5:9:6:8:2:3:4:7:
1:5:9:6:8:2:3:4:7:
1:5:9:6:8:2:3:4:7:
1:5:6:8:9:2:3:4:7:
1:5:6:8:9:2:3:4:7:
1:5:6:8:9:2:3:4:7:
1:5:6:8:9:2:3:4:7:
1:2:3:4:5:6:7:8:9:

结果分析:

1.对于,原始序列(1,5,9,6,8,2,3,4,7),进行两两划分

2.第一趟排序是对1,5进行归并排序

3.第二趟排序是对1,5,9进行归并排序

4.第三趟排序是对6,8进行归并排序

5.第四趟排序是对1,5,9,6,8进行归并排序

6.第五趟排序是对2,3进行归并排序

7.第六趟排序是对4,7进行归并排序

8.第七趟排序是对2,3,4,7进行归并排序

9.第八趟排序是对1,5,6,8,9,2,3,4,7进行归并排序

0 0