您的位置:首页 > 其它

1795 合并排序

2011-08-10 08:37 239 查看
 描述
给出两个集合A、B,元素以升序排列,要求用两个链表LA、LB分别储存A、

B,求出这两个集合的并,以升序存储于链表LC中。

输入
多组数据

对于每组数据,第一行是A、B中元素的个数m、n,以下两行分别以单调上

升的顺序给出A、B中的各个元素(A、B中各元素不重复)。

数据以0 0结束。

输出
对于每组数据,升序输出LC中各元素,以空格分开,结尾换行。



 

经典排序算法

#include <stdio.h>
#include <stdlib.h>

int a[100000],b[100000],c[200000];

void mergeSort(int number1[], int M, int number2[],   int N, int number3[])
{
int i = 0, j = 0, k = 0;
while(i < M && j < N)
{
if(number1[i] <= number2[j])
number3[k++] = number1[i++];
else
number3[k++] = number2[j++];
}
while(i < M)
number3[k++] = number1[i++];
while(j < N)
number3[k++] = number2[j++];
}

int main()
{
int number1,number2;
int i;
scanf("%d %d",&number1,&number2);
while(!(number1==0&&number2==0))
{

for(i=0;i<number1;i++)
scanf("%d",&a[i]);
for(i=0;i<number2;i++)
scanf("%d",&b[i]);

mergeSort(a, number1, b, number2, c);

for(i = 0; i < number1+number2-1; i++)
printf("%d ", c[i]);

printf("%d\n",c[number1+number2-1]);

scanf("%d %d",&number1,&number2);
}
return 0;
}


 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: