码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2016-08-02 17:22:10      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:归并

1.归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法
 (Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;
  即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

2.归并操作的工作原理如下:
第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
第二步:设定两个指针,最初位置分别为两个已经排序序列的起始位置
第三步:比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
重复步骤3直到某一指针超出序列尾
将另一序列剩下的所有元素直接复制到合并序列尾

3.程序代码
#include<stdio.h>
int guibing(int *p,int *q,int left,int mid,int right);
int main(void)
{
	int i;
	int d[]={0};
	int p[10]={2,4,6,8,0,1,3,5,7,9};
	guibing(p,d,0,3,9);
	for(i=0;i<10;i++)
	{
		printf("%d,",d[i]);
	}
	return 0; 
} 
//将两个排好序的序列归并到一个数组里 
int guibing(int *p,int *q,int left,int mid,int right)//mid是第一个数组的最后一个下表 ,q是归并排列好的数组 
{
	int i,j,k;
	i=left;
	j=mid+1;
	k=left;//k是排好序的第一个元素的下表
	while(i<=mid&&j<=right)
	{
		if(p[i]<p[j])
		{
			q[k]=p[i];
			k++;
			i++; 
		}
		else
		{
			q[k]=p[j];
			k++;
			j++;
		}
		if(i>mid)
			while(j<=right)
			q[k++]=p[j++];
		else if(i<=mid)
			while(j>right)
			q[k++]=p[i++];
	} 
}


本文出自 “linux运维” 博客,转载请与作者联系!

归并排序

标签:归并

原文地址:http://xxr007.blog.51cto.com/10602872/1833476

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!