【DAY.6】PHP数据结构与算法_排序_归并排序

概念:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
代码演示
个人版本
   
   
  1. $arr1 = array(2,5,7,8,11,15);
  2. $arr2 = array(1,6,9,10,13,14,15);
  3. function merge_sort($arr1,$arr2){
  4. $len1 = count($arr1);
  5. $len2 = count($arr2);
  6. $key2 = $key1 = 0;
  7. $array = array();
  8. $status = false;
  9. while ($status == false) {
  10. if($key1<$len1 && $key2<$len2){
  11. $array[] = min($arr1[$key1],$arr2[$key2]);
  12. if($arr1[$key1]>$arr2[$key2]){
  13. $key2++;
  14. }else{
  15. $key1++;
  16. }
  17. }else{
  18. $status = true;
  19. if($arr1[$key1]){
  20. $array[] = $arr1[$key1];
  21. }else{
  22. $array[] = $arr2[$key2];
  23. }
  24. }
  25. }
  26. return $array;
  27. }
  28. echo "<pre>";
  29. print_r(merge_sort($arr1,$arr2));
  30. echo "</pre>";

网上参考
   
   
  1. /**
  2. * 将两个有序数组合并成一个有序数组
  3. * @param $arrA,
  4. * @param $arrB,
  5. * @reutrn array合并好的数组
  6. */
  7. function mergeArray($arrA, $arrB) {
  8. $a_i = $b_i = 0;//设置两个起始位置标记
  9. $a_len = count($arrA);
  10. $b_len = count($arrB);
  11. while($a_i<$a_len && $b_i<$b_len) {
  12. //当数组A和数组B都没有越界时
  13. if($arrA[$a_i] < $arrB[$b_i]) {
  14. $arrC[] = $arrA[$a_i++];
  15. } else {
  16. $arrC[] = $arrB[$b_i++];
  17. }
  18. }
  19. //判断 数组A内的元素是否都用完了,没有的话将其全部插入到C数组内:
  20. while($a_i < $a_len) {
  21. $arrC[] = $arrA[$a_i++];
  22. }
  23. //判断 数组B内的元素是否都用完了,没有的话将其全部插入到C数组内:
  24. while($b_i < $b_len) {
  25. $arrC[] = $arrB[$b_i++];
  26. }
  27. return $arrC;
  28. }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值