三言yu 发表于 2020-11-20 00:01:20

冒泡排序求助

大佬们帮忙看看为什么里面的循环条件必须是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;
}

风过无痕1989 发表于 2020-11-20 00:06:27

为了节省运行时间,因前面的 i 个元素,前面已经排好序了,无须再判断;
当然,你直接写成 i ,程序也没有错,只是多浪费一点点系统等待时间而已

三言yu 发表于 2020-11-20 00:43:13

风过无痕1989 发表于 2020-11-20 00:06
为了节省运行时间,因前面的 i 个元素,前面已经排好序了,无须再判断;
当然,你直接写成 i ,程序也没有 ...

改成5就错了,就很折磨人

jackz007 发表于 2020-11-20 08:22:29

本帖最后由 jackz007 于 2020-11-20 09:10 编辑

      因为这一句
                        if arr < arr
      如果 j 变化的上限是 5 的话,当循环到最后一次,也就是 j = 5 - 1 的时候,arr 其实就是 arr 了,对于只有 5 个元素的数组而言,下标为 5 无疑已经越界。

三言yu 发表于 2020-11-20 09:16:27

确实,多谢大神

风过无痕1989 发表于 2020-11-20 18:15:23

三言yu 发表于 2020-11-20 00:43
改成5就错了,就很折磨人

谁让你等于5 了?总共只有5个元素,下标最大就是4

for(i=0;i<5;i++)
      {
                for(j=0;j<5;j++)
                {

你运行一下,看错还是不错?

三言yu 发表于 2020-11-21 12:55:40

风过无痕1989 发表于 2020-11-20 18:15
谁让你等于5 了?总共只有5个元素,下标最大就是4

for(i=0;i

确实是这样,我没注意到

三言yu 发表于 2020-11-21 12:58:54

风过无痕1989 发表于 2020-11-20 18:15
谁让你等于5 了?总共只有5个元素,下标最大就是4

for(i=0;i

不对不对,我这样试了,还是没用

三言yu 发表于 2020-11-21 13:01:19

风过无痕1989 发表于 2020-11-20 18:15
谁让你等于5 了?总共只有5个元素,下标最大就是4

for(i=0;i

j的上限只能是3,因为后面有个arr
页: [1]
查看完整版本: 冒泡排序求助