归并排序c++代码
时间: 2023-06-30 19:21:22 浏览: 107
以下是归并排序的 C++ 代码实现:
```cpp
#include <iostream>
using namespace std;
void merge(int arr[], int l, int m, int r) {
int i, j, k;
int n1 = m - l + 1;
int n2 = r - m;
/* 创建临时数组 */
int L[n1], R[n2];
/* 复制数据到临时数组 L[] 和 R[] */
for (i = 0; i < n1; i++)
L[i] = arr[l + i];
for (j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
/* 归并临时数组到 arr[l..r] */
i = 0; // 初始化第一个子数组的索引
j = 0; // 初始化第二个子数组的索引
k = l; // 初始化归并子数组的索引
while (i < n1 && j < n2) {
if (L[i] <= R[j]) {
arr[k] = L[i];
i++;
}
else {
arr[k] = R[j];
j++;
}
k++;
}
/* 复制 L[] 的剩余元素 */
while (i < n1) {
arr[k] = L[i];
i++;
k++;
}
/* 复制 R[] 的剩余元素 */
while (j < n2) {
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int l, int r) {
if (l >= r) {
return;
}
int m = l + (r - l) / 2;
mergeSort(arr, l, m);
mergeSort(arr, m + 1, r);
merge(arr, l, m, r);
}
void printArray(int A[], int size) {
int i;
for (i = 0; i < size; i++)
cout << A[i] << " ";
cout << endl;
}
int main() {
int arr[] = { 38, 27, 43, 3, 9, 82, 10 };
int arr_size = sizeof(arr) / sizeof(arr[0]);
cout << "给定的数组是:\n";
printArray(arr, arr_size);
mergeSort(arr, 0, arr_size - 1);
cout << "排序后的数组是:\n";
printArray(arr, arr_size);
return 0;
}
```
在这个代码中,`merge()` 函数实现了归并操作,将两个有序的子数组合并成一个有序数组。`mergeSort()` 函数实现了归并排序,通过递归地将数组分成两半,对两个子数组分别排序,最后将它们合并成一个有序数组。`printArray()` 函数用于输出数组的元素。在主函数中,我们定义了一个整型数组 `arr`,并将其作为参数传递给 `mergeSort()` 函数。最后,我们输出排序前和排序后的数组元素。
阅读全文