二路归并排序算法c++
时间: 2024-04-07 07:25:59 浏览: 111
51217540.rar_图形图像处理_C++_
二路归并排序是一种经典的排序算法,它采用分治的思想将一个待排序的序列不断地划分为两个子序列,直到每个子序列只有一个元素,然后再将这些子序列合并成一个有序的序列。下面是二路归并排序算法的C++实现:
```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 mergeSort(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);
}
}
```
阅读全文