社区
C语言
帖子详情
数据结构问题:插入排序运行后得出正确结果,然后报错
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
打赏
收藏
数据结构问题:插入排序运行后得出正确结果,然后报错
几乎与清华教材上的一样,但得出正确结果后,老是报错,请教大家是怎么回事? //*******************开始排序*********************** 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]; \\最后一个循环的这句上出错 } }
复制链接
扫一扫
分享
转发到动态
举报
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 撒。
【
数据结构
】八大排序详解
排序就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前(相同的数据,保证排序前后它们的相对位置不变),则称这种排序算法是稳定的;否则称为不稳定的。内部排序:数据元素全部放在内存中的排序。外部排序:数据元素太多不能同时放在内存中,根据排序过程的要求不能在内外存之间移动数据……
拿命 3 天肝出来的计算机考研
数据结构
与算法复习笔记(超详细教程,更新中)
数据结构
指的是“一组数据的存储结构”,算法指的是“操作数据的一组方法”。
数据结构
是为算法服务的,算法是要作用再特定的
数据结构
上的。最常用的
数据结构
预算法
数据结构
:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Tire 树算法: 递归、排序、二分查找、搜索、哈希算法、贪心算法、分治算法、回溯算法、动态规划、字符串匹配算法算法设计的要求
正确
性:程序没有语法错误。程序对于一切合法的输入数据包括那些典型、苛刻且带有刁难性的几组输入数据可以
得出
满足要求的结果(设计算法时需要考虑到所有可能会输入数据)可读性。
3分钟速读原著《Java
数据结构
与算法》(二)
第三章 简单排序 1.简单排序的种类 1.1 冒泡排序:算法
运行
速度非常慢,简单来说就是每两个元素都需要执行一次比较,最终
得出
结果. 1.2 选择排序:选择排序就是把每个数都和其中的一个固定值进行比较,大的一边,小的一边,可以理解为拿一个固定的最小值,将所有的值都和这个值进行比较,最终排出完整的顺序 1.3
插入排序
:条件是必须要局部有序,冒泡排序和选择排序当中都是不存在局部有序的,
插入排序
简单...
王道408排序算法总结
目录 一、排序定义 二、
插入排序
——直接
插入排序
数据结构
与算法入门(Java)
数据结构
与算法(Java) 1.
数据结构
与算法概述 1.1 什么是
数据结构
? 官方解释:
数据结构
是一门研究非数值计算的程序设计
问题
中的操作对象,以及他们之间的关系和操作等相关
问题
的学科。 大白话:
数据结构
就是把数据元素按照一定的关系组织起来的集合,用来组织和存储数据 1.2
数据结构
分类 传统上,我们可以把
数据结构
分为逻辑结构和物理结构两大类。 逻辑结构: 逻辑结构是从具体
问题
中抽象出来的模型,是抽象意义上的结构,按照对象中数据元素之间的相互关系分类,也是 我们后面课题中需要关注和讨论的
问题
。 a.集
C语言
70,018
社区成员
243,266
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章