#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int a[15] = {15,14,13,12,11,10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
void merge_sort (int l_num, int h_num)
{
int k = l_num;
int m = (h_num+l_num)/2+1;
int i = 0;
int *b = NULL;
int j = 0;
printf("low index is %d, high index is %d.\n", l_num, h_num);
if (l_num == h_num)
{
printf("We have got to the leaf.\n");
return;
}
merge_sort(l_num,(h_num+l_num)/2);
merge_sort((h_num+l_num)/2+1, h_num);
b = malloc((h_num-l_num+1)*sizeof(int));
if (NULL == b)
{
printf("Failed to alloc memory.\n");
return;
}
printf ("Low index is %d, high index is %d.\n", l_num, h_num);
for (j = 0; j <= h_num-l_num; j++)
{
if ((m > h_num)||(a[k] < a[m]))
{
b[j]=a[k++];
}
else
{ b[j]=a[m++];
}
}
for (j = l_num; j <= h_num; j++)
{
a[j] = b[i++];
printf("Index: %d, Num: %d.\n", j, a[j]);
}
free(b);
}
void main()
{
int i = 0;
merge_sort(0, 14);
for (i=0; i<14; i++)
{
printf ("Final result index: %d, %d.\n", i, a[i]);
}
return;
}
归并排序的算法复杂度为 n*lgn
插入排序的复杂度为 n*n,
当n增长到 30后, 归并算法速度快