今天写一下对于有序序列合并这一问题的总结;
第一要抓住这样序列的特点:有序。
第二看题目要求什么:还是有序。
那么就可以通过对两个序列进行遍历,把遍历过的数据存放在另一个空间中,而剩下来的序列直接就可以放进另一个空间内,是因为它是有序的特点,决定它可以直接放进去。
还有一个我错了的地方就是要将arr3这个新数组放在前面,arr3【】=arr1【】表示把arr1的数据放进arr3中而不能倒过来写。没注意这个点,我郁闷了好久。
#include <stdio.h> int main() { int arr1[1000]; int arr2[1000]; int arr3[2000]; int n, m; scanf_s("%d %d", &n, &m); int k = 0; //输入arr1 for (int i = 0;i < n;i++) { scanf_s("%d", &arr1[i]); } //输入arr2 for (int i = 0;i < m;i++) { scanf_s("%d", &arr2[i]); } //合并 int i = 0; int j = 0; while (i < n && j < m) { if (arr1[i] < arr2[j]) { arr3[k] = arr1[i]; i++; k++; } else { arr3[k] = arr3[j]; j++; k++; } } if (i == n) { while (j < m) { arr3[k] = arr2[j]; j++; k++; } } else { while (i < n) { arr3[k] = arr1[i]; i++; k++; } } for (k = 0;k < n + m;k++) { printf("%d", arr3[k]); } return 0; }
