标题:冒泡法,不知道哪里错了,请帮忙指出,谢谢了
只看楼主
神奇的地球
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
mygameoh
Rank: 2
等 级:论坛游民
帖 子:50
专家分:15
注 册:2010-7-8
得分:0 
我也刚看到这一章
a[10]
for(j=o;j<9;j++)
   for(i=o;i<9-j;i++)
2010-07-22 15:18
jinchats
Rank: 1
来 自:安徽
等 级:新手上路
帖 子:16
专家分:7
注 册:2010-6-5
得分:0 
建议楼主还是多理解理解冒泡排序法是怎么实现的
2010-07-22 16:04
familyzy90
Rank: 2
等 级:论坛游民
帖 子:3
专家分:10
注 册:2010-7-29
得分:0 
#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<9;j++)
    {
        for (i=0;i<9-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;
}


修改FOR循环后,你试试看吧  !
2010-07-29 09:19
mujiaha
Rank: 2
等 级:论坛游民
帖 子:37
专家分:65
注 册:2010-7-27
得分:0 
#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=1;i<10-j ;i++ )
        {
            if (a[10-i]<a[j])
            {
                temp=a[j];
                a[j]=a[10-i];
                a[10-i]=temp;
            }
        }
    }
    printf("paixu hou :\n");
    for (i=0;i<10 ;i++ )
    {
        printf("%-5d",a[i]);
    }
    return 0;
}
2010-07-29 18:35
mujiaha
Rank: 2
等 级:论坛游民
帖 子:37
专家分:65
注 册:2010-7-27
得分:0 
我这个可以
for (j=0; j<10;j++)
    {
        for (i=1;i<10-j ;i++ )
        {
            if (a[10-i]<a[j])
            {
                temp=a[j];
                a[j]=a[10-i];
                a[10-i]=temp;
            }
        }当j=0是把所有的数与a[0]比,冒出最小的数,j++,j=1,再把a[1]后面的数与a[1]比较,冒出第二小的数,以此类推...
            
2010-07-29 18:39
mujiaha
Rank: 2
等 级:论坛游民
帖 子:37
专家分:65
注 册:2010-7-27
得分:0 
#include "stdio.h"
int main()
{
    int i,j,k,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=1;i<10-j ;i++ )
        {
            if (a[10-i]<a[j])
            {
                temp=a[j];
                a[j]=a[10-i];
                a[10-i]=temp;
            }
            
        
        }
        for (k=0;k<10;k++ )
         printf("%d ",a[k]);
        printf("\n");
   
    }
        return(0);
}
用这个程序可以检验下是不是用冒泡法表示的。
   
 
2010-07-29 18:49



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




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

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