#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#define MAX 100
int b;
int arr[MAX],tearr[MAX];
void merge(int a[],int t[],int lhead, int rtail)
{
int lt, k, mid, rt;
mid = (lhead+rtail)/2;
lt = k = lhead;
rt = mid+1;
if (rtail-lhead <= 0)
{
goto tailsort;
}
merge(a,t, lhead,mid);
merge(a,t, mid+1,rtail);
while (lt<=mid && rt<=rtail)
{
t[k++] = (a[lt]<=a[rt])?a[lt++]:a[rt++];
}
while (lt<=mid)
{
t[k++] = a[lt++];
}
while (rt<=rtail)
{
t[k++] = a[rt++];
}
for (b=0; b<MAX;b++)
{
a[b] = t[b];
}
tailsort: ;
}
void main()
{
int head,tail,i;
for (i=0; i<MAX;i++)
{
arr[i] = rand();
}
for(i=0; i<MAX; i++) printf("%d ",arr[i]);
system("pause");
head = 0; tail = MAX;
merge(arr,tearr, head, MAX-1);
for (i=0; i<MAX;i++)
{
arr[i] = tearr[i];
}
for (i=0; i<MAX;i++)
{
printf(" %d",arr[i]);
}
system("pause");
}

这是一个排序算法,但结果总是不争取,求大神指出错在哪?
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
4条回答 默认 最新
- 纹枰老妖 2015-07-14 09:11关注
楼主我照抄了您的代码运行后,发现好多数据都清零了,对着您的代码我思考实验了半天,最终终于找到问题所在,以下是代码【在您的代码基础上稍有更改,经我测验没有问题,请验证】
#include
#include
#include
#define MAX 100
int b;
int arr[MAX],tearr[MAX];void merge(int a[],int t[],int lhead, int rtail)
{
int lt, k, mid, rt;
mid = (lhead+rtail)/2;
lt = k = lhead;
rt = mid+1;
if (rtail-lhead <= 0)
{
goto tailsort;
}merge(a,t, lhead,mid); merge(a,t, mid+1,rtail); while (lt<=mid && rt<=rtail) { t[k++] = (a[lt]<=a[rt])?a[lt++]:a[rt++]; } while (lt<=mid) { t[k++] = a[lt++]; } while (rt<=rtail) { t[k++] = a[rt++]; } for (b=0; b<MAX;b++) { a[b] = t[b]; }
tailsort: ;
}void main()
{
int i;for (i=0; i<MAX;i++) { arr[i] = rand(); } for(i=0; i<MAX; i++) printf("%d ",arr[i]); system("pause"); /*****问题出在这里******/ for (i=0; i<MAX;i++) { tearr[i] = arr[i]; } /*****加上这个循环即可,至于为什么,楼主请自行考虑!******/ merge(arr,tearr, 0, MAX-1); for (i=0; i<MAX;i++) { printf(" %d",arr[i]); } system("pause");
}
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报