| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1184 人关注过本帖
标题:大家帮我看看这个哪里有问题啊 冒泡排序!!
只看楼主 加入收藏
心系客深
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-11-1
收藏
得分:0 
回复 10楼 calix
  我人品这么差
2015-05-08 09:19
心系客深
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-11-1
收藏
得分:0 
回复 10楼 calix
嗯 我知道了   
#include <stdio.h>
 int main(void)
 {
     int a[1000],n,i,t,j;

     printf("n=? \n");
     scanf("%d",&n);
   for(i=0;i<n;i++)
       scanf("%d",&a[i]);

 for(i=0;i<n;i++)


     for(j=0;j<n-i-1;j++)
     {
       if(a[j]>a[j+1])
      {
       t=a[j];
       a[j]=a[j+1];
       a[j+1]=t;
      }
     }

     for(i=0;i<n;i++)
 printf("%d \n",a[i]);
 return 0;
 }

这样 我这边可以了 谢谢啊
2015-05-08 09:21
calix
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:28
帖 子:249
专家分:1442
注 册:2015-5-4
收藏
得分:0 
回复 9楼 心系客深
是不是没编译啊
2015-05-08 09:24
心系客深
Rank: 1
等 级:新手上路
帖 子:16
专家分:0
注 册:2014-11-1
收藏
得分:0 
回复 13楼 calix
编译了额 我代码修正了   把那个 就j<n-i改为;额j<n-i-1
2015-05-08 09:30
ID永哥
Rank: 1
等 级:新手上路
帖 子:2
专家分:1
注 册:2015-5-8
收藏
得分:1 
第一个for循环 i < n-1 吧。五个数排序,外循环第一次最大数沉底,还剩四个数,第二次比较次大数沉底还剩三个数...第四次比较就能产生的序列了
2015-05-08 10:24
hzj199603
Rank: 2
来 自:南京
等 级:论坛游民
帖 子:18
专家分:32
注 册:2015-3-29
收藏
得分:1 
回复 楼主 心系客深
#include <stdio.h>
#include <string.h>
int main(void)
{
    int a[1000],n,i,t,j;
    printf("n=? \n");
    scanf("%d",&n);
  for(i=0;i<n;i++)
      scanf("%d",&a[i]);
for(i=0;i<n;i++)
    for(j=0;j<n-i;j++)
    {
      if(a[j]>a[j+1])
     {
      t=a[j];
      a[j]=a[j+1];
      a[j+1]=t;
     }
    }
    for(i=0;i<n;i++)
printf("%d \n",a[i]);//这里多了一个&,这是输出的地址
return 0;
}
2015-05-08 13:19
指津
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2015-3-16
收藏
得分:1 
最外层的for循环,条件判断改成 i < n - 1;
2015-05-09 18:15
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:1 
#include <stdio.h>
#include <string.h>
int main(void)
{
    int a[1000],n,i,t,j;

    printf("n=? \n");
    scanf("%d",&n);
  for(i=0;i<n;i++)
      scanf("%d",&a[i]);
  
for(i=0;i<n;i++)


    for(j=0;j<n-i;j++)
    {
      if(a[j]>a[j+1])
     {
      t=a[j];
      a[j]=a[j+1];
      a[j+1]=t;
     }
    }

    for(i=0;i<n;i++)
printf("%d \n",a[i]);

return 0;



}

红色的地方是是修改过的,其他完全按楼主的程序敲入,编译、链接后运行完全正常,下面是运行的截图:
图片附件: 游客没有浏览图片的权限,请 登录注册
2015-05-09 22:12
取名字
Rank: 8Rank: 8
等 级:贵宾
威 望:21
帖 子:236
专家分:924
注 册:2015-4-27
收藏
得分:0 
    楼主的程序问题在于排序的第二层循环:for(j=0;j<n-i;j++)。
    第一次执行时,因为i=0,所以n-i就等于n,这样的话,在if(a[j]>a[j+1])这里,当j=5时,就是a[5]和a[6]相比,但是当你输入的数字n为6时,实际只是对数组前6个元素赋值,即从a[0]到a[5],a[6]是未被赋值的,其中是一个垃圾值,可能小于此时a[5]的值,所以当比较a[5]和a[6]时,如果a[5]>a[6],则将最大的数存入a[6]中,而你排好序后输出结果时,却是for(i=0;i<n;i++),也就是说,你只输出到a[5]就结束了,所以就有可能看不到最大的那个值了。后来你将排序的第二层循环改为:for(j=0;j<n-i-1;j++)就杜绝上述情况的发生,自然就得到了正确的结果。
    我们没有作修改,就得到了正确的值,或许就是a[6]的值刚好大于a[5]的值,所以没有进行交换,也就看到了最大的值。

[ 本帖最后由 取名字 于 2015-5-9 22:30 编辑 ]
2015-05-09 22:29
尘源
Rank: 2
等 级:论坛游民
帖 子:2
专家分:11
注 册:2015-3-4
收藏
得分:1 
算法错误 (排除这句:printf("%d \n",&a[i]);)

for(i=0;i<n;i++)
    for(j=0;j<n-i;j++)
    {
        if(a[j]>a[j+1])
        {
           t=a[j];
           a[j]=a[j+1];
           a[j+1]=t;
        }
    }

你自己 拿着 纸和笔 手动演练一下 就明白了。
2015-05-10 11:21
快速回复:大家帮我看看这个哪里有问题啊 冒泡排序!!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.068436 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved