美文网首页
PHP归并排序

PHP归并排序

作者: 程序小白菜 | 来源:发表于2019-06-12 10:45 被阅读0次

/**
 *
 * 归并排序
 *
 * @param array $arr
 * @return array
 */
function mergeSort(array &$arr) {
    $len = count($arr);
    if (!$len || empty($arr)) {
        return [];
    }  
    
    process($arr, 0, $len-1);
}

/**
 *
 * 把数组arr[L...R]上调整有序
 *
 * @param array $arr
 * @param $left
 * @param $right
 * @return array
 */
function process(array &$arr, $left, $right) {
      if (intval($left) === intval($right)) {
          return $arr;
      }

      $middle = (int)($left + ($right-$left) / 2);

      process($arr, $left, $middle);
      process($arr, $middle+1, $right);
      mergeArray($arr, $left, $middle, $right);

}

/**
 *
 * 将两个有序的数组合并为有序的数组
 *
 * @param array $arr
 * @param $left
 * @param $middle
 * @param $right
 */
function mergeArr(array &$arr, $left, $middle, $right) {
      $i = 0;
      $helpArr = [];
      
      $leftIndex = $left;
      $rightIndex = $middle +1;

      //若左右两个数组都不越界
      while(($leftIndex <= $middle) && ($rightIndex <= $right)) {
            $helpArr[$i++] = $arr[$leftIndex] <= $arr[$rightIndex] ? $arr[$leftIndex++] : $arr[$rightIndex++];
      }

      //左右两个数组,一定有一个越界,另一个不越界
      while($leftIndex <= $middle) {
            $helpArr[$i++] = $arr[$leftIndex++];
      }

      while($rightIndex <= $right) {
            $helpArr[$i++] =  $arr[$rightIndex++];
      }

      $len = count($helpArr);

      for ($i = 0; $i < $len; $i++) {
            $arr[$left + $i] = $help[$i];
      }

}


相关文章

  • 排序算法

    约定 选择排序 冒泡排序 插入排序 希尔排序 归并排序1. 归并方法2. 自顶向下归并排序3. 自底向上归并排序 ...

  • PHP归并排序

  • 排序二:归并、快排

    文章结构 归并排序 快速排序 源码 1. 归并排序 1.1 什么是归并排序 归并排序的思想是:将待排序的区间平分成...

  • java归并排序

    归并排序什么是归并排序:图解归并排序归并排序有两种实现方式,一是基于递归,而是基于迭代1)基于递归的归并排序: 基...

  • 算法—排序篇2

    1、归并排序(Merging Sort) 归并排序(Merging Sort): 就是利用归并的思想实现排序⽅法....

  • 常见的排序算法(2)

    要点 快速排序 归并排序 1.快速排序 2.归并排序

  • 排序算法之归并排序

    归并排序(Merge Sort) 归并排序是利用归并的思想实现排序的方式,该算法采用的是经典的分治算法 归并排序过...

  • 算法 第二章第二部分笔记

    各种排序算法的性能特点 选择排序 插入排序 希尔排序 归并排序 本地归并排序 自底向上的归并排序 快速排序 三向切...

  • 归并排序(二路归并排序)

    归并排序的思路 归并排序是通过“归并”操作完成排序的,将两个或者多个有序子表归并成一个子表。归并排序是“分治法”的...

  • 算法排序之归并排序和快速排序

    归并排序和快速排序用的都是分治的思想,用递归的编程技巧来实现.咱们先来看归并排序. 归并排序 归并排序的核心思想就...

网友评论

      本文标题:PHP归并排序

      本文链接:https://www.haomeiwen.com/subject/ltskfctx.html