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

2025-02-25 06:03:35
推荐回答(6个)
回答1:

这个是简单的归并排序,我用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] 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];
}

回答2:

#include
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");
}

自己改改 写得匆忙

回答3:

#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");
}

回答4:

#include

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] C[ic] = A[ia++];
else
C[ic] = B[ib++];
printf("%d ", C[ic++]);
}
printf("\n");
return 0;
}

回答5:

这个是数据结构第一课的内容

回答6:

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.

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