c语言,程序设计,输入一个正整数n1,然后输入第一组n1个数,将这些数按从小到大的顺序排列,然后输

c语言,程序设计,输入一个正整数n1,然后输入第一组n1个数,将这些数按从小到大的顺序排列,然后输输入一个正整数n1,然后输入第一组n1个数,将这些数按从小到大的顺序排列,然后输入一个正整数n2,再输入第二组n2个数,将它们也按从小到大的顺序排列,要求将这两组数合并,合并后的数仍然按从小到大的顺序排列,并打印输出。

#include "stdio.h"
#include "stdlib.h"
int input(char *n){
int m;
printf("Enter %s(int 0<%s<101)...\n%s = ",n,n,n);
if(scanf("%d",&m)==1 && m>0 && m<101){
return m;
}
printf("Input error, exit...\n");
exit(1);
}
void getdata(int *x,int n){
int i;
printf("Please enter %d data...\n",n);
for(i=0;i<n;scanf("%d",x+i++));
}
void mysort(int *p,int n){
int i,j,k;
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k]>p[j])
k=j;
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j;
}
}
int main(int argc,char *argv[]){
int a[101],b[101],c[201],i,j,k,n1,n2;
getdata(a,n1=input("n1"));
mysort(a,n1);
getdata(b,n2=input("n2"));
mysort(b,n2);
for(k=j=i=0;i<n1 && j<n2;)
c[k++] = a[i]>b[j] ? b[j++] : a[i++];
if(i>=n1)
while(c[k++]=b[j++],j<n2);
else
while(c[k++]=a[i++],i<n1);
printf("The results are as follows:\n");
for(j=i=0;i<k;printf(++j%20 ? "%d " : "%d\n",c[i++]));
if(j%20)
printf("\n");
return 0;
}

运行样例:

温馨提示:答案为网友推荐,仅供参考
相似回答