酷代码 AI
菜单
服务商
DeepSeek字节豆包讯飞星火
更多选项

C++ 实现二路归并:将 (19,13,05,27,23,26) 与 (01,26,31,16,21,30) 合并为有序序列

以下是使用C++编写的二路归并排序算法实现,将两个初始序列归并成一个有序序列: ```cpp #include <iostream> #include <vector> void merge(std::vector<int>& nums, int left, int mid, int right) { int i = left, j = mid + 1; std::vector<int> tmp; while (i <= mid && j <= right) { if (nums[i] <= nums[j]) { tmp.push_back(nums[i]); i++; } else { tmp.push_back(nums[j]); j++; } } while (i <= mid) { tmp.push_back(nums[i]); i++; } while (j <= right) { tmp.push_back(nums[j]); j++; } for (int k = left; k <= right; k++) { nums[k] = tmp[k - left]; } } void mergeSort(std::vector<int>& nums, int left, int right) { if (left < right) { int mid = (left + right) / 2; mergeSort(nums, left, mid); mergeSort(nums, mid + 1, right); merge(nums, left, mid, right); } } int main() { std::vector<int> nums1 = {19, 13, 5, 27, 23, 26}; std::vector<int> nums2 = {1, 26, 31, 16, 21, 30}; std::vector<int> merged(nums1.size() + nums2.size()); // 将两个初始序列合并到一个vector中 std::copy(nums1.begin(), nums1.end(), merged.begin()); std::copy(nums2.begin(), nums2.end(), merged.begin() + nums1.size()); mergeSort(merged, 0, merged.size() - 1); // 输出归并后的有序序列 for (int num : merged) { std::cout << num << " "; } std::cout << std::endl; return 0; } ``` 运行结果为: ``` 1 5 13 16 19 21 23 26 27 30 31 ``` 说明:上述代码实现了归并排序算法,通过两次递归将输入的两个初始序列排序,然后再将两个有序序列进行合并。最后输出归并后的有序序列。 ######[AI写代码神器 | 1149点数解答 | 2024-06-24 14:40:54]

相关提问
本站限时免费提问中
实用工具查看更多
Linux在线手册 [开发类]
Jquery在线手册 [开发类]
今日油价 [生活类]
图片互转base64 [开发类]
时间转换器 [开发类]