C++ 归并排序 案例
时间: 2024-08-29 21:02:58 浏览: 52
冒泡排序——C++代码
5星 · 资源好评率100%
归并排序是一种分治策略的典型例子,在C++中实现归并排序通常涉及以下几个步骤:
```cpp
#include <iostream>
#include <vector>
// 分割函数,将数组分为两半
void mergeSort(std::vector<int>& arr, int left, int right) {
if (left < right) {
// 计算中间索引
int mid = left + (right - left) / 2;
// 递归地对左半部分和右半部分进行排序
mergeSort(arr, left, mid);
mergeSort(arr, mid+1, right);
// 合并两个已排序的部分
merge(arr, left, mid, right);
}
}
// 合并函数,将两个已排序的部分合并到一起
void merge(std::vector<int>& arr, int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
std::vector<int> L(n1), R(n2);
// 把arr[left...mid]复制到L数组
for (int i = 0; i < n1; i++)
L[i] = arr[left + i];
// 把arr[mid+1...right]复制到R数组
for (int j = 0; j < n2; j++)
R[j] = arr[mid + 1 + j];
// 遍历并合并两个已排序的数组
int i = 0, j = 0, k = left;
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
} else {
arr[k] = R[j];
j++;
}
k++;
}
// 如果还有剩余元素,则拷贝较大的一半
while (i < n1)
arr[k++] = L[i++];
while (j < n2)
arr[k++] = R[j++];
}
int main() {
std::vector<int> numbers{9, 7, 5, 11, 12, 2, 14, 3};
int arraySize = numbers.size();
std::cout << "Before sorting:\n";
for (auto num : numbers)
std::cout << num << " ";
mergeSort(numbers, 0, arraySize - 1);
std::cout << "\nAfter sorting:\n";
for (auto num : numbers)
std::cout << num << " ";
return 0;
}
```
这个示例展示了如何使用C++实现归并排序的过程,包括分割数组、递归排序以及最后的合并操作。运行这段代码会得到排序前后的数组结果。如果你想了解如何分析归并排序的时间复杂度和其他细节,可以问我相关的
阅读全文