采用分治法
void dealMergeSort(int * src, int * tmp, int start, int end)
{
if (start >= end)
{
return;
}
int mid = (start + end) / 2;
dealMergeSort(src, tmp, start, mid);
dealMergeSort(src, tmp, mid + 1, end);
int a = start;
int b = mid + 1;
int c = start;
while (a <= mid && b <= end)
{
if (src[a] < src[b])
{
tmp[c] = src[a];
a++;
}
else
{
tmp[c] = src[b];
b++;
}
c++;
}
for (; a <= mid; a++, c++)
{
tmp[c] = src[a];
}
for (; b <= end; b++, c++)
{
tmp[c] = src[b];
}
int i;
for (i = start; i <= end; i++)
{
src[i] = tmp[i];
}
}
void MergeSort(int * src, int n)
{
int * tmp = (int *)malloc(n * sizeof(int));
dealMergeSort(src, tmp, 0, n - 1);
free(tmp);
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include "sort.h"
#define BUFSIZE 10000
void printArray(int * src, int n)
{
int i;
for (i = 0; i < n; i++)
{
printf("%d ", src[i]);
}
putchar('\n');
}
int main()
{
#if 0
int src[10] = { 3, 1, 6, 7, 9, 2, 4, 8, 10, 5 };
MergeSort(src, 10);
printArray(src, 10);
#else
srand(time(NULL));
int src[BUFSIZE];
int i;
for (i = 0; i < BUFSIZE; i++)
{
src[i] = rand() % 5000 + 1;
}
MergeSort(src, BUFSIZE);
printArray(src, BUFSIZE);
#endif
system("pause");
return 0;
}