求助大佬,初学c语言出现的问题

为什么size在排序后大小改变为43了... 为什么size在排序后大小改变为43了 展开
 我来答
紫薇参星
科技发烧友

2022-10-17 · 有一些普通的科技小锦囊
知道大有可为答主
回答量:5983
采纳率:92%
帮助的人:3480万
展开全部

排序后size的值变为43是因为冒泡排序程序for循环的终止条件应该是i<size-1;

内部for循环的终止条件应该是j<size-i-1;换句话说你的排序程序数组越界了,

把数组后面的一个数也一块排序了,而这个数在内存中正是size的值11,

而且C语言是不检查数组越界的,所以排序后size的值的成了43,

因为size参加了排序,11被排到前面去了,最大数43被排到最后,

也就是size变量在内存的位置,所以size的值变成了43.

改完后的C语言程序如下(见图,改动的地方见注释,共3处)

xgn911
2022-10-22 · TA获得超过1359个赞
知道小有建树答主
回答量:1493
采纳率:96%
帮助的人:631万
展开全部

冒泡排序bubble_sort中的size应改为size-1

若写为size,当i=0时,j+1会取到size-i=size,也即会访问到arr[size],超过数组限制

由于编译器一般不检查数组越界,而在定义时size变量正好声明在arr数组之后

因此arr[size]地址实际保存的是size变量的数据,相当于将size变量也与数组一起排序

那么最终数组中的最大数43会被交换到size变量的地址处,所以size值变为了43

将bubble_sort中的两处size改为size-1即可,修改的部分和代码运行结果如下:

附源码链接:冒泡排序

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式