| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1063 人关注过本帖
标题:冒泡法,不知道哪里错了,请帮忙指出,谢谢了
取消只看楼主 加入收藏
神奇的地球
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-6-6
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:4 
冒泡法,不知道哪里错了,请帮忙指出,谢谢了
程序代码:
#include "stdio.h"
int main()
{
    int i,j,a[10],temp;
    printf("input 10 numbers:\n");
    for (i=0;i<10 ;i++ )
    {
        scanf("%d",&a[i]);
    }
    for (j=0; j<10;j++)
    {
        for (i=0;i<10-j ;i++ )
        {
            if (a[i]>a[i+1])
            {
                temp=a[i];
                a[i]=a[i+1];
                a[i+1]=temp;
            }
        }
    }
    printf("paixu hou :\n");
    for (i=0;i<10 ;i++ )
    {
        printf("%-5d",a[i]);
    }
    return 0;
}


程序如上,

问题是,排序后,a[i]总是为-1,并且最大数没有了?

学到数组,对这个程序也不太明白,看了几遍,然后不看书写的,结果却错了;对照书,也没找到个所以然来

所以请大家帮忙看看,谢谢了

图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 神奇的地球 于 2010-7-22 12:33 编辑 ]
搜索更多相关主题的帖子: 冒泡 
2010-07-22 12:32
神奇的地球
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-6-6
收藏
得分:0 
以下是引用do8do8do8在2010-7-22 12:42:10的发言:

经测试 没发现错误 别跟我说大白天的演午夜凶灵



我用的是版主制作置顶帖里EDITPLUS+GCC编译器

每次排序后a[1]=-1,

程序不对,就是3楼说的那样
2010-07-22 14:35
神奇的地球
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-6-6
收藏
得分:0 
以下是引用sunyh1999在2010-7-22 12:46:21的发言:

给你个例子,你参考一下
{int i,j,t,kz;//i,j用来做循环,t用来数值交换
for(i=1;i<=5-1;i++)//应为冒泡排序,所以可以少比较一次
{kz=1;
for(j=1;j<=5-i;j++)//同上
if(chengji[j]>chengji[j+1])//如果前一个数比后一个数大,那么就进行数值交换
{kz=0;
t=chengji[j];chengji[j]=chengji[j+1];chengji[j+1]=t;//数值交换
}
dataout(number,chengji);//调用数据输出函数
return;
}
}

这个例子我看不懂
kz=1;
kz=0;
是做什么的啊
2010-07-22 14:38
神奇的地球
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-6-6
收藏
得分:0 
以下是引用vs_inzaghi在2010-7-22 12:56:54的发言:

你是用的a和a两个变量,所以你应该写成
……
for (j=0; j<9;j++)
    {
        for (i=0;i<9-j ;i++ )
……
如果你还是i<10-j的话,那么当开始j=0的时候,i的值会一直涨到9,那么你实际是在比较a[9]和a[10]的大小……而,根本就不可能有a[10]……
好像是因为c语言对数组不做越界检查,所以你能通过编译并运行,但是得不到你想要的结果……

我感觉我的理解应该有道理,但是……我按你的程序也得出了正确的结果……
可能a[10](指代a[9]后面的那个地址,因为没有a[10]的说法)中的值是随机的……


谢谢指点啊
2010-07-22 14:39
神奇的地球
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2010-6-6
收藏
得分:0 
以下是引用ggyy4k在2010-7-22 13:57:54的发言:

#include "stdio.h"
int main()
{
    int i,j,a[10]={9,8,7,6,5,4,3,2,1,10},temp;
    a[10]=-1;
    for (j=0; j<10;j++)
    {
        for (i=0;i<20-j ;i++ )
        {
            if (a>a)
            {
                temp=a;
                a=a;
                a=temp;
            }
        }
    }
    printf("paixu hou :\n");
    for (i=0;i<20 ;i++ )
        printf("%-5d",a);
}
做了一下试验,数组越界可读但不可写,各位大侠看看



不好意啊
水平有限,看不懂
2010-07-22 14:40
快速回复:冒泡法,不知道哪里错了,请帮忙指出,谢谢了
数据加载中...
 
   



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

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