急求C语言实现一个小算法

有顺序表A和B,其元素均按从小到大的升序排列,编写一个算法将它们合并成一个顺序表C,要求C的元素也按从小到大的升序排列

请哥哥们帮帮我啦 谢谢啦 要完整的程序哟·· 我的所有分都拿出来了

这个是简单的归并排序,我用c来帮你写出这个排序的函数代码:

void merge(int a[],int p,int q,int r)
{
int b[r],s,t,k,i;
s=p;t=q+1;k=p;
while ((s<=q)&&(t<=r))
{
if (a[s]<a[t]) b[k]=a[s++];
else b[k]=a[t++];
k++;
}
if (s==q+1) for(;k<=r;k++) b[k]=a[t++];
else for(;k<=r;k++) b[k]=a[s++];
for (i=p;i<=r;i++) a[i]=b[i];
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-09-24
#include <stdio.h>
void main()
{
int a[]={3,5,8,11};
int b[]={2,6,8,9,11,15,20};
int c[11];
int i=0,j=0,k=0;
while(i<=3 && j<=6)
{
if(a[i]<=b[j])
{
c[k]=a[i];k++;i++;
}
else
{
c[k]=b[j];k++;j++;
}
}
while(i<=3)
{
c[k]=a[i];
k++;
i++;
}
while(j<=6)
{
c[k]=b[j];
k++;
j++;
}
for(k=0;k<11;k++)
{
printf("%-3d",c[k]);
}
printf("\n");
}

自己改改 写得匆忙
第2个回答  2008-09-26
#include "stdio.h"
#define M 20

void main()
{
int a[M];
int b[M];
int c[2*M];
int aLen,bLen,i,j,k;

printf("ÇëÊäÈëµÝÔöÓÐÐòµÄÊý×éaµÄÊý¾Ý,ÒÔ-1½áβ:");
aLen = 0;
do
{
scanf("%d", &a[aLen]);
} while(a[aLen++] != -1);
aLen -= 1;

printf("ÇëÊäÈëµÝÔöÓÐÐòµÄÊý×ébµÄÊý¾Ý,ÒÔ-1½áβ:");
bLen = 0;
do
{
scanf("%d", &b[bLen]);
} while(b[bLen++] != -1);
bLen -= 1;

i = 0;
j = 0;
k = 0;
while( i < aLen && j < bLen )
{
if (a[i] < b[j])
{
c[k++] = a[i++];
}
else
{
c[k++] = b[j++];
}
}
if(aLen == i)
{
while(j < bLen)
c[k++] = b[j++];
}
else
{
while(i < aLen)
c[k++] = a[i++];
}

for(k = 0; k < aLen + bLen; k++)
printf("%4d",c[k]);
printf("\n");
}
第3个回答  2008-09-24
#include <stdio.h>

int main()
{
int A[10]={1,3,5, 12,13,16, 21,23,34, 100};
int B[12]={0,2,5, 11,14,19, 20,21,34, 98,99,200};
int C[22];

int ia = 0;
int ib = 0;
int ic = 0;
while(1)
{
if(10==ia && 12==ib)break;

if(10==ia)
C[ic]=B[ib++];
else if(12==ib)
C[ic]=A[ia++];
else if(A[ia]<B[ib])
C[ic] = A[ia++];
else
C[ic] = B[ib++];
printf("%d ", C[ic++]);
}
printf("\n");
return 0;
}
第4个回答  2008-09-24
这个是数据结构第一课的内容
第5个回答  2008-09-24
void MergeList(List * La,List * Lb,List * Lc)
{
InitList(Lc); /*构造一个空的线性表Lc*/
i=j=1;k=0; /*指针i和j初始值为1*/
La_len=ListLength(La);
Lb_len=ListLength(Lb);
while((i<=La_len)&&(j<=Lb_len))
{ /* La和Lb均非空*/
ai=GetElem(La,i);
bj=GetElem(Lb,j);
if(ai<bj) /*将La中的元素插入到表Lc中*/
{ListInsert(Lc,++k,ai);++i;}
else
if (ai == bj )
{ ListInsert(Lc,++k,ai);++i;
ListInsert(Lc,++k,bj);++j;}
else
{ ListInsert(Lc,++k,bj);++j;}
} /*while结束*/
While(i <=La_len)
{/*如果表La没有取完,则将表La中的所剩元素插入到表lc中*/
ai=GetElem(La,i++);
ListInsert(Lc,++k,ai);
}
While(j<=Lb_len)
{
bj=GetElem(Lb,j++);
ListInsert(Lc,++k,bj);
}
}/*MergeList*/

具体算法思想:
设LC为空表。
将LA或LB中的元素逐个插入到LC中即可。

具体方法:为使LC中元素按值非递减有序排列,可设两个指针i和j分别指向LA和LB中某个元素,若设i当前所指的元素为a,j当前所指的元素为b,则当前应插入到LC中的元素c为:
a>b,C=b;a<=b,c=a.

以上是我们《数据结构》课件上的,算法应该问题不大,题目是一样的。

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网