【求帮助】求大家帮我看看,归并排序。结果不正确

陈夏明 2014-12-03 11:00:15
# include<stdio.h>

void guibing(int * num, int begin, int end);
void paixu(int * num, int begin, int mid, int end);

int main(void)
{
int num[] = {5,1,4,2,6,3,7,9,8,0};

int i=0;
printf("排序前:");
for(i=0; i<10; ++i)
printf("%d ", num[i]);

printf("\n");

guibing(num, 0, 9);

printf("排序后:");
for(i=0; i<10; ++i)
printf("%d ", num[i]);

return 0;
}

void guibing(int * num, int begin, int end)
{
int i;
if(begin < end)
{
int mid = (begin+end)/2;
guibing(num, begin, mid);
guibing(num, mid+1, end);
paixu(num, begin, mid, end);
}
}

void paixu(int * num, int begin, int mid, int end)
{
int temp[end-mid+1];

int k=0;

int b = begin, m = mid+1;

while(b<=mid && m<=end) //取元素比较并填入临时数组
{
if(num[b] < num[m])
{
temp[k] = num[b];
++b;
}
else
{
temp[k] = num[m];
++m;
}
++k;
}

//将剩余元素填入

while(b<=mid)
{
temp[k] = num[b];
++b;
++k;
}

while(m<=end)
{
temp[k] = num[m];
++m;
++k;
}

int i;
for(i=0; i<k; ++i)
{
num[i] = temp[i];
}
}
...全文
127 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
陈夏明 2014-12-03
  • 打赏
  • 举报
回复


发现问题了。如图

请问:
为何目标数组的下标需要从begin开始而不是从0开始呢?
我觉得我的temp数组里每次都是存放了从头到尾的所有的值的啊?
陈夏明 2014-12-03
  • 打赏
  • 举报
回复
程序运行的结果不对。。但是我检查不出是哪里错了。。。

69,336

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧