题解 | #有序序列合并#
有序序列合并
https://www.nowcoder.com/practice/a9e943b0dab142759807d0cfb6863897
#include <stdio.h> /* 将两个升序排序的序列合并为一个有序序列 参数表: size1 待合并数组arr1的大小 size2 待合并数组arr2的大小 mergeArr 用于记录合并后的数组 */ void MergeArr(int arr1[], int size1, int arr2[], int size2, int mergeArr[]) { int size = size1 + size2; int index1 = 0; int index2 = 0; int i = 0; for(index1 = 0, index2 = 0, i = 0; i < size; i++) { if(index1 < size1 && index2 < size2) { if(arr1[index1] < arr2[index2]) { mergeArr[i] = arr1[index1]; index1++; } else { mergeArr[i] = arr2[index2]; index2++; } }else if (index1 >= size1) { //数组1中的元素已经全部合并完,剩下的按顺序存放数组2剩下的元素 mergeArr[i] = arr2[index2]; index2++; }else { //数组2中的元素已经全部合并完,剩下的按顺序存放数组1剩下的元素 mergeArr[i] = arr1[index1]; index1++; } } } int main() { int arr1[1000] = { 0 }; int arr2[1000] = { 0 }; int size1 = 0; int size2 = 0; scanf("%d %d", &size1, &size2); for(int i = 0; i < size1; i++) { scanf("%d", &arr1[i]); } for(int i = 0; i < size2; i++) { scanf("%d", &arr2[i]); } int mergeArr[2000] = { 0 }; int size = size1 + size2; MergeArr(arr1, size1, arr2, size2, mergeArr); for(int i = 0; i < size; i++) { printf("%d ", mergeArr[i]); } return 0; }