ico交易网站怎么做,长春品牌网站建设公司,给网站写文章怎么做的,昆明小程序定制合并有序数组 题目描述#xff1a;解法思路#xff1a;解法代码#xff1a;运行结果#xff1a; 题目描述#xff1a;
输入两个升序排列行的序列#xff0c;将两个序列合并为一个有序序列并输出。 输入包含三行#xff0c;第一包含两个正整数n, m#xff0c;用空格分隔… 合并有序数组 题目描述解法思路解法代码运行结果 题目描述
输入两个升序排列行的序列将两个序列合并为一个有序序列并输出。 输入包含三行第一包含两个正整数n, m用空格分隔。n表示第二行第⼀个升序序列中数字的个数m表示第三行第二个升序序列中数字的个数。其中1n30, 1m30 第二⾏包含 n 个整数用空格分隔。第三行包含 m 个整数用空格分隔。输出为一行输出长度为nm的升序序列即长度为n的升序序列和长度为m的升序序列中的元素重新进行升序序列排列合并。
测试
输⼊
5 6
1 3 7 9 22
2 8 10 17 33 44
输出
1 2 3 7 8 9 10 17 22 33 44解法思路
定义⼀个长度为 nm 的新数组 arr3 将两个有序数组合并到 arr3 数组中使得 arr3 数组有序。 1. 定义⼀个长度为 nm 的新数组 arr3 以及两个指针 i 和 j 分别指向 arr1 和arr2 的开头 2. 定义⼀个计数器 k 初始化为 0 3. 比较 arr1[i] 和 arr2[j] 将较小的数存入 arr3 中并将对应指针向后移动一位 4. 将计数器 k 加 1 5. 重复步骤 3 和 4 直到某个指针越界 6. 加粗样式将另一个指针指向的数组的剩余所有元素依次存入 arr3 中存入同时将计数器 k 的值自增1 7. 至此 arr3 数组中的元素为 arr1 数组和 arr2 数组合并并排序后的结果按序输出前 k个元素即可。
解法代码
#include stdio.h
int main() {int n 0;int m 0;//输⼊scanf(%d %d, n, m);//⽀持变⻓数组的int arr1[30] {0};int arr2[30] {0};int arr3[60] {0};//输⼊arr1int i 0;for (i 0; i n; i){scanf(%d, arr1[i]);}//输⼊arr2for (i 0; i m; i){scanf(%d, arr2[i]);}//合并arr1和arr2到arr3数组中i 0; //i遍历arr1int j 0;//j遍历arr2int k 0;//k遍历arr3//合并两个数组的元素⾄arr3数组中while (i n j m){//⽐较两个指针指向的元素⼤⼩//arr1数组当前元素较⼩将此值放⼊arr3数组并令i和k后移if (arr1[i] arr2[j]){arr3[k] arr1[i];i;k;}//arr2数组当前元素较⼩将此值放⼊arr3数组并令j和k后移else{arr3[k] arr2[j];j;k;}}//若指针i越界则arr1数组所有元素已经放⼊arr3数组//arr2数组中有剩余元素将它们依次放⼊arr3数组if (i n){for (; j m; j){arr3[k] arr2[j];k;}}//若指针j越界则arr2数组所有元素已经放⼊arr3数组//arr1数组中有剩余元素将它们依次放⼊arr3数组if (j m){for (; i n; i){arr3[k] arr1[i];k;}}//打印for (k 0; k m n; k){printf(%d , arr3[k]);}return 0;
}运行结果