标题:冒泡排序错误!
只看楼主
iqyuankong
Rank: 2
等 级:论坛游民
帖 子:68
专家分:10
注 册:2009-10-23
结帖率:92.86%
 问题点数:0 回复次数:9 
冒泡排序错误!
#include<stdio.h>
void main()
{
    int a[5],i,j,temp;
    for(i=0;i<5;i++)
        scanf("%d",&a[i]);
    for(i=0;i<5;i++)
        for(j=0;j<5-i;j++)
            if(a[j]<a[j+1])
            {temp=a[j];
            a[j]=a[j+1];
            a[j+1]=temp;}
    for(i=0;i<5;i++)
        printf("%d ",a[i]);
}
搜索更多相关主题的帖子: 冒泡 
2009-12-22 19:09
小J
Rank: 8Rank: 8
等 级:等待验证会员
威 望:1
帖 子:282
专家分:704
注 册:2009-6-18
得分:0 
你的循环次数搞错了。你好好看下书。
  for(i=0;i<5;i++)
        for(j=0;j<5-i;j++)
此处应该是i<4   j<4-i;
2009-12-22 19:14
music369
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2009-10-24
得分:0 
同楼上
2009-12-22 19:19
iqyuankong
Rank: 2
等 级:论坛游民
帖 子:68
专家分:10
注 册:2009-10-23
得分:0 
回复 2楼 小J
为什么说4不是5,<5的范围不就是0-4吗?一共5个元素啊。书上我看了下也是这样啊。不同的是,我是从键盘初始化数组元素,跟这个有关系吗?
2009-12-22 19:33
C78486080
Rank: 2
等 级:论坛游民
帖 子:18
专家分:18
注 册:2009-12-21
得分:0 
把这个语句“for(j=0;j<5-i;j++)”中的改为"for(j=0;j<4-i;j++)就行了,你开始用第一个数去比较只需要比较4次,所以改为5。
2009-12-22 19:50
小J
Rank: 8Rank: 8
等 级:等待验证会员
威 望:1
帖 子:282
专家分:704
注 册:2009-6-18
得分:0 
因为你冒泡的时候最后一个数不用排序,也就是说你的大循环只用排N-1次,而你的小循环里面的也是因为最后一个数不用排序,所以救是4,至于减i则是因为每次循环找出一个数来。这跟你是怎么初始化的没有任何关系!
注意我说的最后一个数不是指的你数组中的最后一个元素,而是如果你从大到小排的话你最小的那个数不用排,反之则是最大的数不用排!

[ 本帖最后由 小J 于 2009-12-22 20:13 编辑 ]
2009-12-22 20:11
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
得分:0 
运行了一下,没发现错误,结果为降序。
2009-12-22 20:19
iqyuankong
Rank: 2
等 级:论坛游民
帖 子:68
专家分:10
注 册:2009-10-23
得分:0 
回复 6楼 小J
所有冒泡法都是这样吗,,只排n-1吗?最后一个不用排是不是浮起所以不用排!
2009-12-22 20:22
小J
Rank: 8Rank: 8
等 级:等待验证会员
威 望:1
帖 子:282
专家分:704
注 册:2009-6-18
得分:0 
是的。只要是冒泡都是这样的!
2009-12-22 20:45
chao41091153
Rank: 2
等 级:论坛游民
帖 子:39
专家分:33
注 册:2010-5-26
得分:0 
程序代码:
#include <stdio.h>
#include <stdlib.h>
void sort(int *,int );
main()
{
      int a[10],i;
      for(i=0;i<10;i++)
          scanf("%d",&a[i]);
      sort(a,10);
      for(i=0;i<10;i++)
          printf("%d ",a[i]);
      getch();
}
void sort(int *pa,int c)
{ 
    int i,j,k;
    for(i=0;i<c-1;i++)
        for(j=0;j<c-1-i;j++)
            if(pa[j]>pa[j+1])
            {
                k=pa[j];
                pa[j]=pa[j+1];
                pa[j+1]=k;
            }
}                   
2010-10-24 19:33



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-294084-1-1.html




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

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