归并排序(递归)
拆分:递归的将当前数组二分(如果N是偶数,两边个数平等,如果是奇数,则一边多一个元素),直到只剩 0 或 1 个元素
归并:分别将左右半边数组排序,然后归并在一起形成一个大的有序数组
思路:将原数组一直折半拆分,知道拆到最后一个元素,然后开辟临时空间将数组依次合并,最后完成排序
#include <iostream>
using namespace std;
void hb(int arr[], int star, int mid, int enda)
{
int temp[enda - star + 1];
int st1 = star;
int st2 = mid + 1;
int t = 0;
while(st1 <= mid && st2 <= enda)
{
temp[t++] = arr[st1] >= arr[st2] ? arr[st1++] : arr[st2++];
}
while(st1 <= mid)
{
temp[t++] = arr[st1++];
}
while(st2 <= enda)
{
temp[t++] = arr[st2++];
}
for(int i = 0; i < t; i++)
{
arr[star + i] = temp[i];
}
}
void gb