#include <iostream>
using namespace std;
// 合并
void merge(int arr[], int tempArr[], int left, int mid, int right)
{
// 标记左半区第一个元素
int l_pos = left;
// 标记右半区第一个元素
int r_pos = mid + 1;
// 临时数组元素的下标
int pos = left;
// 有序归并
while (l_pos <= mid && r_pos <= right)
{
if (arr[l_pos] < arr[r_pos])
tempArr[pos++] = arr[l_pos++];
else
tempArr[pos++] = arr[r_pos++];
}
while (l_pos <= mid)
tempArr[pos++] = arr[l_pos++];
while (r_pos <= right)
tempArr[pos++] = arr[r_pos++];
// 把临时数组中合并后的元素复制回原来的数组
while (left <= right) {
arr[left] = tempArr[left];
left++;
}
}
// arr原数组,tempArr辅助数组,left左边界,right右边界
void merge_sort(int arr[], int tempArr[], int left, int right)
{
// 若只有一个元素,不需要归并排序
if (left == right)
return;
// 中间点
int mid = (left + right) / 2;
// 对左半部分进行归并排序
merge_sort(arr, tempArr, left, mid);
// 对右半部分进行归并排序
merge_sort(arr, tempArr, mid + 1, right);
// 合并已经排序的部分
merge(arr, tempArr, left, mid, right);
}
int main()
{
int N = 10;
int TEST[] = {3,8,1,9,2,11,15,22,0,87};
for (int i : TEST)
cout << i << " ";
cout << endl;
int tempArr[N];
// 对TEST归并排序
merge_sort(TEST, tempArr, 0, N - 1);
for (int i : TEST)
cout << i << " ";
return 0;
}
C++ 实现归并排序
于 2022-06-20 10:03:46 首次发布
3万+

被折叠的 条评论
为什么被折叠?



