1795 合并排序

来源:互联网 发布:三星25nm闪存 知乎 编辑:程序博客网 时间:2024/06/08 00:06
 
描述

给出两个集合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; } 


 

原创粉丝点击