冒泡排序求助
大佬们帮忙看看为什么里面的循环条件必须是5-i,不能是5#include<stdio.h>
int main()
{
int i,j,arr,t;
for(j=0;j<5;j++)
{
scanf("%d",&arr);
}
for(i=1;i<5;i++)
{
for(j=0;j<5-i;j++)
{
if(arr<arr)
{
t=arr;
arr=arr;
arr=t;
}
}
}
for(j=0;j<5;j++)
printf("%d ",arr);
return 0;
} 为了节省运行时间,因前面的 i 个元素,前面已经排好序了,无须再判断;
当然,你直接写成 i ,程序也没有错,只是多浪费一点点系统等待时间而已 风过无痕1989 发表于 2020-11-20 00:06
为了节省运行时间,因前面的 i 个元素,前面已经排好序了,无须再判断;
当然,你直接写成 i ,程序也没有 ...
改成5就错了,就很折磨人 本帖最后由 jackz007 于 2020-11-20 09:10 编辑
因为这一句
if arr < arr
如果 j 变化的上限是 5 的话,当循环到最后一次,也就是 j = 5 - 1 的时候,arr 其实就是 arr 了,对于只有 5 个元素的数组而言,下标为 5 无疑已经越界。 确实,多谢大神 三言yu 发表于 2020-11-20 00:43
改成5就错了,就很折磨人
谁让你等于5 了?总共只有5个元素,下标最大就是4
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
{
你运行一下,看错还是不错? 风过无痕1989 发表于 2020-11-20 18:15
谁让你等于5 了?总共只有5个元素,下标最大就是4
for(i=0;i
确实是这样,我没注意到
风过无痕1989 发表于 2020-11-20 18:15
谁让你等于5 了?总共只有5个元素,下标最大就是4
for(i=0;i
不对不对,我这样试了,还是没用
风过无痕1989 发表于 2020-11-20 18:15
谁让你等于5 了?总共只有5个元素,下标最大就是4
for(i=0;i
j的上限只能是3,因为后面有个arr
页:
[1]