数据结构问题:插入排序运行后得出正确结果,然后报错

jackygo 2006-03-06 05:48:14
几乎与清华教材上的一样,但得出正确结果后,老是报错,请教大家是怎么回事?
//*******************开始排序***********************
for (i=2;i<=n;i++) \\n为元素个数
{
if(a[i]<a[i-1])
{
a[0]=a[i];
for (j=i-1;a[0]<a[j];j--)
{

a[j+1]=a[j];

}
a[j+1]=a[0]; \\最后一个循环的这句上出错
}
}
...全文
197 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
InfidelX 2006-03-07
  • 打赏
  • 举报
回复
mark
jackygo 2006-03-07
  • 打赏
  • 举报
回复
汗!!惭愧。多谢了。
adintr 2006-03-07
  • 打赏
  • 举报
回复
我晕哦:
for (i=0;i<=100;i++)
a[i]=0;

显然越界了撒,
for(i = 0; i < 100; ++i) 就对了
jackygo 2006-03-07
  • 打赏
  • 举报
回复
忘了告诉大家,我设的是int a[100],n是根据输入多少个元素来确定的,这样应该不会存在越界吧。主函数全部代码如下:
void main(void)
{
int a[100];
int j=0,i=0,n;

for (i=0;i<=100;i++)
a[i]=0;
i=1;
printf("请输入第%d个字符,输入0结束\n",i);
scanf("%d",&a[i]) ;
while (a[i]!=0)
{
i++;
printf("请输入第%d个字符,输入0结束\n",i);
scanf("%d",&a[i]) ;
}

n=i-1;
i=1;
printf("您输入的序列是这样的%d\n",n);
while (a[i]!=0)
{
printf("%d->",a[i]);
i++;
}
printf("结束\n");


//*******************开始排序***********************
for (i=2;i<n-1;i++)
{
if(a[i]<a[i-1])
{
a[0]=a[i];
for (j=i-1;a[0]<a[j];j--)
{

a[j+1]=a[j];

}
a[j+1]=a[0];
}
}

//**************输出结果*****************************
i=1;
printf("插入排序结果是这样的\n");
while (a[i]!=0)
{
printf("%d->",a[i]);
i++;
}
printf("结束\n");


}


adintr 2006-03-07
  • 打赏
  • 举报
回复
又看了遍程序,原来是把 a[0] 当作临时变量来使用的啊,
真是匪夷所思,定义一个 int temp 来作为临时变量不是很清晰么。。。

TO feak(老莫):
因为 a[0] < a[0] 肯定不成立的,所以可以保证循环中的 j >= 0
adintr 2006-03-07
  • 打赏
  • 举报
回复
如果是定义成的 int a[n+1],
那 for (i=2;i<=n;i++) 就没错,但 n 就不是指的元素个数了。元素个数就是 n + 1 才对。
如果定义成 int a[n] 的话, i <= n 肯定是越界的。
feak 2006-03-07
  • 打赏
  • 举报
回复
这一句for (j=i-1;a[0]<a[j];j--)改成for (j=i-1;(a[0]<a[j])&&(j>=0);j--)更好,否则可能运行越界。
lzp229 2006-03-06
  • 打赏
  • 举报
回复
n为元素个数,a[n]就有问题了
zez 2006-03-06
  • 打赏
  • 举报
回复
i < n-1
上面笔误
zez 2006-03-06
  • 打赏
  • 举报
回复
应该是 i<n+1 吧.你的程序明显内存越界了
cody416 2006-03-06
  • 打赏
  • 举报
回复
好像是对的,我运行了一下,也没有报错啊!可能是你的编译器的原因吧!我用的Turbo C2.0.
#include "stdio.h"
#define n 10

main()
{

int i,j;
int a[n+1];

printf("\nInput 10 number\n");
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
for(i=2;i<=n;i++)
{
if(a[i]<a[i-1])
{
a[0]=a[i];
for(j=i-1;a[0]<a[j];j--)
{
a[j+1]=a[j];
}
a[j+1]=a[0];
}
}
printf("\nthe sorted number is:\n");
printf("\n");
for(i=1;i<=n;i++)
{
printf(" %d",a[i]);
}
}
jackygo 2006-03-06
  • 打赏
  • 举报
回复
改过后,怎么还是报同样错误,书上也是<=
adintr 2006-03-06
  • 打赏
  • 举报
回复
显然应该是 i < n 而不是 i < = n 撒。

70,018

社区成员

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

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