归并排序(递归)
拆分:递归的将当前数组二分(如果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 gbsort(int arr[], int star, int enda)
{
if(star >= enda)
{
return ;
}
int mid = (star + enda) / 2;
gbsort(arr, star, mid);
gbsort(arr, mid + 1, enda);
hb(arr, star, mid, enda);
}
int main()
{

本文介绍了归并排序的递归方法,首先通过递归将数组不断拆分为更小的部分,直到每个部分只剩1个元素。接着,通过归并操作将已排序的小数组逐步合并成大的有序数组,最终完成整个数组的排序过程。
最低0.47元/天 解锁文章
982

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



