在我们日常的程序开发时候,有时候需要对一个已知的集合按照一定的规则进行排序,其实当数据的规模不太大时或者数据的有序特征比较明显,其实我们可以采用其它的排序算法例如:Bubble Sort, Insertion Sort ,  Shell Sort 等。 但是前面3中算法的共同特点是,都是从原始的列表里把元素两两取出,然后进行比较,显然冒泡排序和插入排序使用了太多的比较,在数据规模增大时,优势明显下降(主要是以每种算法的复杂度O为参考)。所以这里我们可以尝试用替代法,可以尝试将列表分成更小的子列表然后对他们排序,在排序完更小的子列表后,再将小的子列表合并成一个有序列表,这种方法就是典型的“分治法”,分而治之,逐个克服.(Divide and Conquer).

一般来说,如果一个问题太难以至于无从下手,我们可以尝试将它分成较小的子问题,然后尝试解决这些子问题,最后把这些子问题的结果合并起来。从而解决原始问题。

下图是以一个较短的数组为例来展示整个排序过程:

aaarticlea/png;base64,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" alt="" />

下面是用PHP code 实现的,以上面的元素为例,着这里主要是借用PHP的2个函数来完成的(array_slice,array_splice).

 <?php

 $input = array(6,3,2,7,1,5,8,4);

 function merge_sort($arr)
{
if(count($arr) <= 1){
return $arr;
} $left = array_slice($arr,0,(int)(count($arr)/2));
$right = array_slice($arr,(int)(count($arr)/2)); $left = merge_sort($left);
$right = merge_sort($right); $output = merge($left,$right); return $output; } function merge($left,$right)
{
$result = array(); while(count($left) >0 && count($right) > 0)
{
if($left[0] <= $right[0]){
array_push($result,array_shift($left));
}else{
array_push($result,array_shift($right));
}
} array_splice($result,count($result),0,$left);
array_splice($result,count($result),0,$right); return $result; } $output = merge_sort($input);
echo "<pre>";
print_r($output);
echo "</pre>"
?>

PHP 归并排序的更多相关文章

  1. 算法与数据结构(十五) 归并排序(Swift 3.0版)

    上篇博客我们主要聊了堆排序的相关内容,本篇博客,我们就来聊一下归并排序的相关内容.归并排序主要用了分治法的思想,在归并排序中,将我们需要排序的数组进行拆分,将其拆分的足够小.当拆分的数组中只有一个元素 ...

  2. [算法]——归并排序(Merge Sort)

    归并排序(Merge Sort)与快速排序思想类似:将待排序数据分成两部分,继续将两个子部分进行递归的归并排序:然后将已经有序的两个子部分进行合并,最终完成排序.其时间复杂度与快速排序均为O(nlog ...

  3. 归并排序的java实现

    归并排序的优点不说了. 做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组. 思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有 ...

  4. JavaScript算法(归并排序与快速排序)

    归并排序与快速排序这两个算法放在一起,也是因为时间复杂度都是对数级别的. 目前看过的资料,归并排序看<学习JavaScript数据结构与算法>介绍的归并排序吧,快速排序直接看百度百科,讲的 ...

  5. 归并排序算法 java 实现

    归并排序算法 java 实现 可视化对比十多种排序算法(C#版) [直观学习排序算法] 视觉直观感受若干常用排序算法 算法概念 归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Di ...

  6. java归并排序,单线程vs多线程

    一.什么是归并排序 归并排序又称合并排序,它是成功应用分治技术的一个完美例子.对于一个需要排序的数组A[0..n-1],归并排序把它一分为二:A[0..n/2-1]和A[n/2..n-1],并对每个子 ...

  7. sphinx索引分析——文件格式和字典是double array trie 检索树,索引存储 – 多路归并排序,文档id压缩 – Variable Byte Coding

    1 概述 这是基于开源的sphinx全文检索引擎的架构代码分析,本篇主要描述index索引服务的分析.当前分析的版本 sphinx-2.0.4 2 index 功能 3 文件表 4 索引文件结构 4. ...

  8. php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序

    <?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){    $num=count($arr);    ...

  9. [NOIP2013] 火柴排队(归并排序)

    题目描述 涵涵有两盒火柴,每盒装有 n 根火柴,每根火柴都有一个高度. 现在将每盒中的火柴各自排成一列, 同一列火柴的高度互不相同, 两列火柴之间的距离定义为: ∑(ai-bi)^2 其中 ai 表示 ...

  10. 用Java写算法之归并排序

    转自:http://flyingcat2013.blog.51cto.com/7061638/1281026 前面的三种排序算法(冒泡排序,选择排序,插入排序)在平均情况下均为O(n^2)复杂度,在处 ...

随机推荐

  1. Android+Robotium

    因为调动到一个新的部门在这个部门做的一直就是移动产品,所以这段时间会一直不断的研究app的自动化,主要是针对android,这里我采用的是Robotium框架,这个框架比较简单,使用eclipse+r ...

  2. 关于 未能加载文件或程序集“MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项。系统找不到指定的文件。

    我这个项目是MVC4的,有两个版本,第一个版本直接运行没什么问题,但是跑第二个版本的时候就给我提示这个错误.好吧,百度果然是万能的.下边是解决方案. 1.找到 C:\Windows\Microsoft ...

  3. 产品设计原则之移动APP【转】

    随着移动互联网的发展,越来越多的Web产品开始布局移动端,因此最近经常碰到PM们在交流讨论移动APP产品的设计.我从事移动互联网已经有一年多了,通过不断的学习和实践也积累了一些心得,今天整理并分享一下 ...

  4. linux下获取ip

    如果打开虚拟机 没有ip置灰显示了 lo 可以使用dhclient自动获取ip 如果想开机就自动获取ip: vim /etc/rc.d/rc.local 在这里插入dhclient命令

  5. 怎么删除远程登录连接的ip

    通过远程桌面可以登录到远程电脑上进行相应的操作,在登录过后会在本地电脑上留下登录过的IP以及登录用户名相关信息,可能会给远程的电脑带来安全隐患,下面介绍一下清除远程桌面历史记录的方法. 1.删除我的文 ...

  6. android 获取IMEI号

    android 获取 imei号码 核心代码: Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId( ...

  7. listagg( ) within group ( order by ) 与 wm_concat

    listagg( ) within group ( order by ) 与 wm_concat --oracle 11g 及以后适合 最好 select spbywslid,listagg(xm,' ...

  8. Bootstrap之Footer页尾布局(2015年05月28日)

    直接上页尾部分的代码: <!--采用container-fluid,使得整个页尾的宽度为100%,并设置它的背景色--><footer class="container-f ...

  9. Jersey(1.19.1) - Root Resource Classes

    Root resource classes are POJOs (Plain Old Java Objects) that are annotated with @Path have at least ...

  10. django 学习-10 Django多对多关系模型

    1.vim blog/models.py class   Author(models.Model): name = models.CharField(max_length=30) def unicod ...