标签:归并
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