设计一段程序,自项向下的二路归并排序算法,用c++分治法来完成
时间: 2024-11-30 07:29:04 浏览: 5
C++实现自顶向下的归并排序算法
5星 · 资源好评率100%
设计一个自顶向下二路归并排序的C++程序,我们首先需要理解二路归并排序的基本思想:将数组分为两部分,分别对它们进行排序,然后合并两个已排序的部分。以下是简单的C++代码实现:
```cpp
#include <iostream>
#include <vector>
// 归并两个有序区间
void merge(std::vector<int>& arr, int left, int mid, int right) {
std::vector<int> temp(right - left + 1);
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j])
temp[k++] = arr[i++];
else
temp[k++] = arr[j++];
}
// 将剩余未处理的元素复制回原数组
while (i <= mid)
temp[k++] = arr[i++];
while (j <= right)
temp[k++] = arr[j++];
// 把临时数组的内容复制回原数组
for (i = left; i <= right; ++i)
arr[i] = temp[i - left];
}
// 自顶向下的二路归并排序
void mergeSort(std::vector<int>& arr, int start, int end) {
if (start < end) {
int mid = (start + end) / 2;
mergeSort(arr, start, mid); // 对左半部分进行递归排序
mergeSort(arr, mid + 1, end); // 对右半部分进行递归排序
merge(arr, start, mid, end); // 合并两个有序区间
}
}
int main() {
std::vector<int> numbers = {9, 7, 5, 11, 12, 2, 14, 3, 10};
int n = numbers.size();
std::cout << "Original array:\n";
for (int num : numbers)
std::cout << num << " ";
std::cout << "\n";
mergeSort(numbers, 0, n - 1);
std::cout << "Sorted array:\n";
for (int num : numbers)
std::cout << num << " ";
std::cout << "\n";
return 0;
}
```
在这个例子中,`mergeSort`函数是主函数,它负责划分数组、排序和最终合并。当你运行这个程序,它会按照升序对你输入的数组进行排序。
阅读全文