定义:首先将所有的数据默认每个数字单独一个组,接下来两两合并(两个组),当所有的数据在同一个组内的时候,数据完全有序,则可以结束 稳定性:稳定
运行代码如下:
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
//一次融合函数 时间复杂度O(n) 空间复杂度O(n)
void Merge(int arr[], int len, int gap)
{
int low1 = 0;
int high1 = low1+gap-1;
int low2 = high1+1;
int high2 = low2+gap-1<len ? low2+gap-1 : len-1;
int *brr = (int*)malloc(len * sizeof(int));
assert(brr != NULL);
int i=0;//i指向辅助空间brr的下标
while(low2 < len)//写法不唯一:目的就一个,证明两个手抓到的两个组都有数据
{
while(low1<=high1 && low2<=high2)//保证两个组内还有数据去拿来比较
{
if(arr[low1] <= arr[low2])
{
brr[i++] = arr[low1++];
}
else
{