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 }