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中各元素,以空格分开,结尾换行。
经典排序算法
给出两个集合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; }