定义省略:
code:
#include <stdio.h>
void MergeTwo(int *src, int *dst, int left, int middle, int n)
{
int i, j, k, t;
i = left;
k = left;
j = middle + 1;
while ( (i <= middle) && (j <= n) )
{
if (src[i] <= src[j])
{
dst[k] = src[i];
i++;
}
else
{
dst[k] = src[j];
j++;
}
k++;
}
if (i > middle)
{
for (t = j; t <= n; t++)
dst[k + t - j] = src[t];
}
else
{
for (t = i; t <= middle; t++)
dst[k + t - i] = src[t];
}
}
void MergeAll(int *src, int *dst, int length, int step)
{
int i = 0, t = 0;
while (i <= (length - 2*step + 1))
{
MergeTwo(src, dst, i, i + step - 1, i + 2 * step - 1);
i = i + 2 * step;
}
if (i + step -1 < length)
{
MergeTwo(src, dst, i, i + step - 1, length);
}
else
{
for(t = i; t <= length; t++)
dst[t] = src[t];
}
for(t = 0; t <= length; t++)
src[t] = dst[t];
printf("current sorting result : ");
for (i = 0; i <= length; i++)
printf("%d ", dst[i]);
printf("\n");
}
int main(int argc, char* argv[])
{
int i;
int list[] = {1,3,89,3,5,67,25,88,55,43,7,9,10};
int length = sizeof(list)/sizeof(list[0]);
int list2[] = {1,3,89,3,5,67,25,88,55,43,7,9,10};
int step = 1;
int count = length - 1;
while(step < length)
{
printf("Merge length = %d\n", step);
MergeAll(list, list2, count, step);
step = 2*step;
if (step < length)
{
printf("Merge length = %d\n", step);
MergeAll(list2, list, count, step);
step = 2 * step;
}
}
//
printf("\nThe final result is : \n");
for(i = 0; i < length; i++)
printf("%d ", list[i]);
printf("\n");
return 0;
}