合并排序是一种常见的排序算法,它将一个无序的数组分成两个子数组,然后分别对子数组进行排序,最后将两个有序的子数组合并成一个有序的数组。在C++中,可以使用递归或迭代的方式实现合并排序。
以下是一个使用递归实现合并排序的示例代码:
#include <iostream>
#include <vector>
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);
std::vector<int> R(n2);
for (int i = 0; i < n1; i++) {
L[i] = arr[left + i];
}
for (int j = 0; j < n2; j++) {
R[j] = arr[mid + 1 + j];
}
int i = 0;
int j = 0;
int 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];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
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);
}
}
int main() {
std::vector<int> arr = {9, 5, 7, 1, 3, 8, 2, 6, 4};
int n = arr.size();
mergeSort(arr, 0, n - 1);
std::cout << "Sorted array: ";
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
这段代码使用了递归的方式实现了合并排序。首先,定义了一个merge
函数,用于合并两个有序的子数组。然后,定义了mergeSort
函数,用于递归地将数组分成两半并进行排序。最后,在main
函数中,创建一个待排序的数组,并调用mergeSort
函数进行排序,最终输出排序后的结果。
合并排序的优势在于其稳定性和可扩展性。它可以处理大规模的数据集,并且在最坏情况下的时间复杂度为O(nlogn)。合并排序适用于各种排序场景,特别是对于需要稳定排序的情况。
腾讯云提供了多种云计算相关产品,其中包括云服务器、云数据库、云存储等。您可以访问腾讯云官方网站(https://cloud.tencent.com/)了解更多关于这些产品的详细信息。
领取专属 10元无门槛券
手把手带您无忧上云