c语言编写一个归并函数 归并有序数组c语言

C语言 一维整型数组的输入输出,排序和归并函数 急急急~~~

你没有规定sort()用什么排序方式,我用的冒泡。

创新互联成立与2013年,是专业互联网技术服务公司,拥有项目网站设计、做网站网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元吉首做网站,已为上家服务,为吉首各地企业和个人服务,联系电话:18982081108

没有什么注释先道个歉。

不知道你要这个程序是做什么的,计算机专业还是随便玩玩,如果是专业的这种基础算法一定要掌握。

#includestdio.h

void arrayio(int a[], int n,char io);

void sort(int a[],int n);

void merger(int a[], int n, int b[], int m, int c[]);

int main()

{

int a[5],b[10],c[15];

printf("Input Array a[5]:\n");

arrayio(a,5,'i');

printf("Input Array b[10]:\n");

arrayio(b,10,'i');

sort(a,5);

sort(b,10);

merger(a,5,b,10,c);

printf("Output Array c[15]:\n");

arrayio(c,15,'o');

//system("PAUSE");

return 0;

}

void arrayio(int a[], int n,char io)

{

int i;

switch(io)

{

case 'i':

for(i=0;in;++i) scanf("%d",a[i]);

break;

case 'o':

for(i=0;in;++i) printf("%d ",a[i]);

printf("\n");

break;

default:

printf("Wrong parameter.\n");

}

}

void sort(int a[],int n)

{

int i,j,temp;

//Bubble

for(i=0;in-1;i++)

for(j=i+1;jn;j++)

{

if(a[i]a[j])

{

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

}

void merger(int a[], int n, int b[], int m, int c[])

{

int i,j,k;

i=j=0;

for(k=0;km+n;k++)

{

if(in jm)

{

if(a[i]b[j])

{

c[k]=b[j];

j++;

}

else

{

c[k]=a[i];

i++;

}

}

else if(i==n)

{

for(;jm;j++)

{

c[k]=b[j];

k++;

}

}

else //j==m

{

for(;in;i++)

{

c[k]=a[i];

k++;

}

}

}

}

输入输出:

Input Array a[5]:

9 1 4 2 5

Input Array b[10]:

8 3 6 4 7 2 9 8 5 3 4

Output Array c[15]:

1 2 2 3 3 4 4 5 5 6 7 8 8 9 9

c语言中的merge函数

merge()是C++标准库的函数,主要实现函数的排序和合并,不仅仅是合并,具体要求参照标准库。

#include"stdafx.h"

#includeiostream

#includealgorithm

#includearray

#includelist

usingnamespacestd;

boolcomp(constinti,constintj){

returnij;

}

intmain(void){

/*自定义谓词*/

std::arrayint,4ai1={1,3,4,5};

std::listintlsti1;

for(constautoi:ai1)

lsti1.push_front(i);//从大到小

std::arrayint,4ai2={2,6,7,8};

std::listintlsti2;

for(constautoi:ai2)

lsti2.push_front(i);

lsti1.merge(lsti2,comp);

std::cout"merge():";

for(constautoi:lsti1)

std::couti"";

std::coutstd::endl;

/*默认谓词*/

std::arrayint,4ai1d={1,3,4,5};

std::listintlsti1d;

for(constautoi:ai1d)

lsti1d.push_back(i);//从小到大

std::arrayint,4ai2d={2,6,7,8};

std::listintlsti2d;

for(constautoi:ai2d)

lsti2d.push_back(i);

lsti1d.merge(lsti2d);

std::cout"merge():";

for(constautoi:lsti1d)

std::couti"";

std::coutstd::endl;

return0;

}

扩展资料

Merge算法的两种接口,把两个有序的数组合并到另一个数组中:

void Merge(int *A, int f, int m, int e){

int temp[e-f+1];

int i,first=f,last=m+1;

for(i=0;i(e-first+1)f=mlast=e;i++){

if(A[f]=A[last]) {

temp[i]=A[f];

f++;

}

else {

temp[i]=A[last];

last++;

}

}

while(fmlast=e){

temp[i]=A[last];

i++;

last++;

}

while(f=mlaste){

temp[i]=A[f];

i++;

f++;

}

for(i=0;first=e;i++,first++){

A[first]=temp[i];

}

}

参考资料来源:百度百科—c语言

用C语言编一个归并排序的程序

/**设个有序关键字表s1=(18,25,37,42),s2=(20,33,40).同时将s1,s2存储在数组r[1...7]中

**s1放r[1..4],s2放[5..7],现要归并到一维数组r2[1..7]中,只要依次比较这两个有序

**表中相应记录关键字,按取小原则复制到r2中

**/

#includestdio.h

#define MAXITEM 100

typedef struct rec

{

int key;

char data[20];

}elemnode[MAXITEM];

void merge(elemnode r,elemnode r1,int l,int m,int h)

{ // i,j是r的指示器,i的取值从l到m, j的取值从m+1到h,k是r1的指示器

int i = l,j = m+1,k = l;

while(i=m j=h)

{

if(r[i].key=r[j].key)

{

r1[k] = r[i];

i++;

}

else

{

r1[k] = r[j];j++;

}

k++;

}

if(im)

while(j=h)

{

r1[k] = r[j];

j++;

k++;

}

else

while(i=m)

{

r1[k] = r[i];

i++;

k++;

}

}

void mergepass(elemnode r,elemnode r1,int n,int l)

{

//将r中长度为L的两个部分合并,第一部分从p到期(p+l-1)

//第二部分从 p+1到(p+2*l-1)

int p = 1;

while(n-p+12*l)

{

merge(r,r1,p,p+l-1,p+2*l-1);

p+=2*l; //p向后移动2*l,准备下一次合并

}

if(n-p+1l) //一个长度为l的部分与一个长度小于l的部分合并

merge(r,r1,p,p+l-1,n);

else //只剩下一个长度不大于l的部分,将其复制到r1

for(;p=n;p++) r1[p] = r[p];

}

void mergesort(elemnode r,elemnode r1,int n)

{//对r中数据元素进行归并,结果仍放在r 中

int l = 1;

while(ln)

{

mergepass(r,r1,n,l);l*=2;

mergepass(r1,r,n,l);l*=2;

}

}

void disp(elemnode r,int n)

{

int i;

for(i=1;i=n;i++)

printf("%6d",r[i].key);

printf("\n");

for(i=1;i=n;i++)

printf("%6s",r[i].data);

printf("\n");

}

void main()

{

elemnode s = {{0," "},{75,"王华"},{87,"李英"},{68,"张萍"},{92,"陈涛"},{88,"刘丽"},{61,"章强"},

{77,"孙军"},{96,"朱斌"},{80,"许伟"},{72,"曾亚"}};

elemnode s1;

int n = 10;

mergesort(s,s1,n);

disp(s,n);

}


网站名称:c语言编写一个归并函数 归并有序数组c语言
当前路径:http://hbruida.cn/article/ddiedjd.html