科技: 人物 企业 技术 IT业 TMT
科普: 自然 科学 科幻 宇宙 科学家
通信: 历史 技术 手机 词典 3G馆
索引: 分类 推荐 专题 热点 排行榜
互联网: 广告 营销 政务 游戏 google
新媒体: 社交 博客 学者 人物 传播学
新思想: 网站 新书 新知 新词 思想家
图书馆: 文化 商业 管理 经济 期刊
网络文化: 社会 红人 黑客 治理 亚文化
创业百科: VC 词典 指南 案例 创业史
前沿科技: 清洁 绿色 纳米 生物 环保
知识产权: 盗版 共享 学人 法规 著作
用户名: 密码: 注册 忘记密码?
    创建新词条

最新历史版本 :归并排序 返回词条

  • 编辑时间: 历史版本编辑者:admin
  • 内容长度:图片数:目录数:
  • 修改原因:

 

目录

归并排序回目录

并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

归并操作

归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作。

算法描述

并操作的工作原理如下:
申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

定两个指针,最初位置为别为两个已经排序序列的起始位置
比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置重复步骤3直到某一指针达到序列尾

将另一序列剩下的所有元素直接复制到合并序列尾

示例代码

下示例代码实现了归并操作。array【】是元素序列,其中从索引p开始到q位置,按照升序排列,同时,从(q+1)到r也已经按照升序排列,merge()函数将把这两个已经排序好的子序列合并成一个排序序列。结果放到array中。/**

* 0 <= p <= q < r, subarray array【p..q】 and array【q+1..r】 are already sorted.

* the merge() function merges the two sub-arrays into one sorted array.

*/

static void merge(int array【】, int p, int q, int r)

{

int i,k;

int begin1,end1,begin2,end2;

int* temp = (int*)malloc((r-p)*sizeof(int));

begin1= p;     end1 = q;

begin2 = q+1;  end2 = r;

k = 0;

while((begin1 <= end1)&&( begin2 <= end2))

{

if(array【begin1】<array【begin2】)

{

temp【k】 = array【begin1】;  begin1++;

}

else

{

temp【k】 = array【begin2】;  begin2++;

}

k++;               

}

while(begin1<end1)

{

temp【k++】 = array【begin1++】;

}

while(begin2<end2)

{

temp【k++】 = array【begin2++】;

}

for (i = 0; i < (r - p); i++)

array【p+i】 = temp;

free(temp);

}

归并排序

归并排序具体工作原理如下(假设序列共有n个元素):

将序列每相邻两个数字进行归并操作(merge),形成floor(n/2)个序列,排序后每个序列包含两个元素

将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素

重复步骤2,直到所有元素排序完毕

示例代码

示例代码为C语言,输入参数中,需要排序的数组为array【】,起始索引为first,终止索引为last。调用完成后,array【】中从first到last处于升序排列。

void merge_sort(int array【】, unsigned int first, unsigned int last)

{

int mid = 0;

if(first<last)

{

mid = (first+last)/2;

merge_sort(array, first, mid);

merge_sort(array, mid+1,last);

merge(array,first,mid,last);

}

}

算法复杂度

比较操作的次数介于(nlogn) / 2和nlogn - n + 1。 赋值操作的次数是(2nlogn)。归并算法的空间复杂度为:Θ (n)

 

相关他们回目录

→如果您认为本词条还有待完善,请 编辑词条

标签: 归并排序