归并排序算法:
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
void Mearge(int *arr, int len, int gap)
{
int *brr = (int *)malloc(sizeof(int)*len);
assert(brr != NULL);
int i = 0;
int start1 = 0;
int end1 = start1 + gap - 1;
int start2 = end1 + 1;
int end2 = start2 + gap - 1<len - 1 ? start2 + gap - 1 : len - 1;
while (start2<len)
{
while (start1 <= end1&&start2<end2)
{
if (arr[start1]<arr[start2])
{
brr[i++] = arr[start1++];
}
else
{
brr[i++] = arr[start2++];
}
}
while (start1 <= end1)
{
brr[i++] = arr[start1++];
}
while (start2 <= end2)
{
brr[i++] = arr[start2++];
}
start1 = end2 + 1;
end1 = start1 + gap - 1;
start2 = end1 + 1;
end2 = start2 + gap - 1<len ? start2 + gap - 1 : len - 1;
}
while (start1<len)
{
brr[i++] = arr[start1++];
}
for (int i = 0; i<len; i++)
{
arr[i] = brr[i];
}
free(brr);
}
void Mearge_Sort(int *arr, int len)
{
len += 1;
for (int i = 1; i<len; i++)
{
Mearge(arr, len, i);
}
}
void Show(int *arr, int len)
{
for (int i = 0; i<len; ++i)
{
printf("%d ", arr[i]);
}
printf("\n");
}
void main()
{
int arr[] = { 18,2,15,3,6,42,96,0,8,21 };
Show(arr, 10);
Mearge_Sort(arr, 10);
Show(arr, 10);
}