C++ 合并两个有序数组(n=5000000,避免栈溢出)
以下为一个合并两个有序数组的 C++ 程序,它可以处理 n 为 5000000 的情况,并避免了栈溢出的问题。\n\ncpp\n#include <iostream>\n#include <vector>\n\nusing namespace std;\n\nint main() {\n int N;\n cin >> N;\n \n vector<int> nums(N);\n for (int i = 0; i < N; i++) {\n cin >> nums[i];\n }\n \n vector<int> a(nums.begin(), nums.begin() + N/2);\n vector<int> b(nums.begin() + N/2, nums.end());\n \n vector<int> merged;\n int i = 0, j = 0;\n while (i < a.size() && j < b.size()) {\n if (a[i] < b[j]) {\n merged.push_back(a[i]);\n i++;\n } else {\n merged.push_back(b[j]);\n j++;\n }\n }\n \n while (i < a.size()) {\n merged.push_back(a[i]);\n i++;\n }\n \n while (j < b.size()) {\n merged.push_back(b[j]);\n j++;\n }\n \n for (int k = 0; k < merged.size(); k++) {\n cout << merged[k] << " ";\n }\n \n return 0;\n}\n\n\n注意:这个程序使用了 vector 来存储输入的数字,并根据给定的 N 将其分为两个数组 a 和 b。然后,使用两个指针 i 和 j 来遍历 a 和 b,比较当前指针位置的元素大小,并将较小的元素添加到合并数组 merged 中。最后,将剩余的元素添加到 merged 中,并输出合并后的数组。
原文地址: https://www.cveoy.top/t/topic/pKUa 著作权归作者所有。请勿转载和采集!