酷代码 AI
菜单
全部AI  /  热门  /  AI写代码神器
服务商

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 ``` 说明:上述代码实现了归并排序算法,通过两次递归将输入的两个初始序列排序,然后再将两个有序序列进行合并。最后输出归并后的有序序列。 [2024-06-24 14:40:54 | AI写代码神器 | 1149点数解答]

相关提问