//合并排序
void MergeSort(int a[],int n)
{
int *p;
int h,count,len,f;
count = 0; //排序步骤
len =1; //有序序列的升序
f = 0; //变量f作标志
if (!(p=(int *)malloc(sizeof(int)*n))) //分配内存空间
{
printf("内存分配失败!\n");
exit(0);
}
while (len < n)
{
if (f == 1) //交替在a和p之间合并
{
MergeOne(p, a, n, len); //p合并到a
}
else
{
MergeOne(a, p, n, len); //a合并到p
}
len = len *2;
f = 1-f;
count++;
printf("第%d步排序结果:",count);
for (h = 0; h < SIZE; h++)
{
printf(" %d",a[h]);
}
printf("\n");
}
if (f)
{
for (h = 0; h < n; h++)
{
a[h] = p[h];
}
}
free(p);
}
int main(int argc, const char * argv[])
{
int shuzu[SIZE],i;
srand(time(NULL));
for (i=0; i
{
shuzu[i] = rand() % 100;
}
printf("排序前的数组为:\n");
for (i=0; i
{
printf(" %d",shuzu[i]);
}
printf("\n");
MergeSort(shuzu,SIZE);
printf("排序后的数组为:\n");
for (i=0; i
{
printf(" %d",shuzu[i]);
}
printf("\n");
// std::cout << "Hello, World!\n";
return 0;
}
运行结果:
