c++ merge_sort()
时间: 2024-03-31 13:30:56 浏览: 128
merge_sort.c
merge_sort()是一种常用的排序算法,它采用分治法的思想,将一个大问题分解为多个小问题来解决。具体步骤如下:
1. 分解:将待排序的数组不断地二分,直到每个子数组只有一个元素。
2. 合并:将相邻的两个子数组按照顺序合并,形成一个有序的子数组。
3. 重复合并:不断地重复合并相邻的子数组,直到最终得到一个完全有序的数组。
下面是C++中merge_sort()函数的一个示例实现:
```cpp
// 合并两个有序数组
void merge(int arr[], int left, int mid, int right) {
int n1 = mid - left + 1;
int n2 = right - mid;
// 创建临时数组
int L[n1], 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, 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];
i++;
k++;
}
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
// 归并排序
void merge_sort(int arr[], int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
// 分解为子问题
merge_sort(arr, left, mid);
merge_sort(arr, mid + 1, right);
// 合并子问题的解
merge(arr, left, mid, right);
}
}
```
这是一个递归实现的merge_sort()函数,它通过不断地将数组分解为更小的子数组,并将它们合并成有序数组来完成排序。你可以调用merge_sort()函数来对一个整数数组进行排序。
阅读全文