#include <stdio.h>
#include <stdlib.h>
//在求时间复杂度时,是用每一行代码的时间复杂度进行相加得到的,应该是这样去做.
//总的执行时间 = 2 × 输入长度为n/2的sort函数的执行时间 + merge函数的执行时间Θ(n)
//采用分而治之的方法不是这样嘛.
void merge(int *arr, int low, int mid, int high)
{
int i = low, j =mid+1,k=0;
int *pbuf = NULL;
pbuf = (int*)malloc(sizeof(int)*(high-low+1)); //这两个参数都是数组的索引,要记得数组索引的特性.
if(pbuf==NULL)
{
printf("out of space!/n");
return;
}
while(i<=mid && j<=high)
{
pbuf[k++] = (arr[i]<arr[j])?arr[i++]:arr[j++];
}
while(i<=mid)
{
pbuf[k++] = arr[i++];
}
while(j<=high)
{
pbuf[k++] = arr[j++];
}
free(pbuf);
pbuf = NULL;
}
void merge_sort(int *arr, int start, int end)
{
int mid;
if(start<end)
{
mid = (end+start)/2;
merge_sort(arr, start, mid);
merge_sort(arr, mid+1, end);
merge(arr, start, mid, end);
}
}
int main(void)
{
int arr[100];
int i;
for(i=100; i>0; i--)
{
arr[i-1] = i;
}
merge_sort(arr, 0, 99);
for(i=0; i<100; i++)
{
printf("%d ", arr[i]);
if(i==20)
{
printf("/n");
}
}
printf("/n");
return 0;
}