场景:
两个非递减顺序表合并为一个非递减顺序表
例如:{1,3,6,8}和{2,3,7,9,11,13}合并为{1,2,3,3,6,7,8,9,11,13}
代码:
提示:需考虑两个边界情况。即两个表其中一个满了,则将另一个表的其他数据直接搬到新表。
#include <iostream>
void showList(int arr[], int length);
void mergeList(const int arr1[], int length1, const int arr2[], int length2, int arr3[]);
using namespace std;
int main(){
int arr1[] = {1,3,6,8};
int arr2[] = {2,3,7,9,11,13};
int arr3[8];
mergeList(arr1, 4, arr2, 6, arr3);
showList(arr3, 10);
}
void mergeList(const int arr1[], int length1, const int arr2[], int length2, int arr3[]){
int j = 0;
for(int i=0;i<length1;) {
if(j==length2){
for(;i<length1;i++){
arr3[i+j] = arr1[i];
}
break;
}
for(;j<length2;){
if(arr1[i]>arr2[j]){
arr3[i+j] = arr2[j];
j++;
}else{
arr3[i+j] = arr1[i];
i++;
break;
}
}
}
if(j<length2){
for(int q=length1+j;q<length1+length2;q++){
arr3[q] = arr2[j];
j++;
}
}
}
void showList(int arr[], int length){
for(int i=0;i<length;i++){
cout << arr[i] << ' ';
}
cout << endl;
}
结果截图: