c++有序列表的合并

 1 #include <iostream>
 2 using namespace std;
 3 void merge(int a[],int b[],int n,int c[])
 4 {
 5     int i=0,j=0,k=0;
 6     while(i<n && j<n)
 7     {
 8         while(a[i]<=b[j]&& i<n && j<n)   //注意这里和下面的相同
 9     {
10         c[k++]=a[i++];     //将较小的数放入c中,然后k+1,i+1,之后返回循环判断条件是否成立,否则跳出循环执行下面的操作,将c的下一个赋值为b中的一个元素
11     }
12     while(a[i]>b[j] && i<n && j<n)  //注意把i<n && j<n这个条件重复加上,因为在执行 的时候i,j可能已经到达5了,再继续计算就出错了 
13     {
14         c[k++]=b[j++];
15     }
16     }
17     while(i<n)
18     {
19         c[k++]=a[i++];
20     }
21     while(j<n)
22     {
23         c[k++]=b[j++];
24     }
25 }
26 int main()
27 {
28     int n;
29     cin>>n;
30     int *a,*b,*c;
31     a=new int [n];
32     b=new int [n];
33     c=new int [2*n];
34     for(int i=0;i<n;i++)
35     {
36         cin>>a[i];
37     }
38     for(int i=0;i<n;i++)
39     {
40         cin>>b[i];
41     }
42     merge(a,b,n,c);
43     for(int i=0;i<2*n;i++)
44     {
45         cout<<c[i]<<" ";
46     }    
47 }

 

posted @ 2018-10-14 11:37  chenhanwu  阅读(1088)  评论(0编辑  收藏  举报