| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 336 人关注过本帖
标题:急!大神速来帮忙!冒泡法问题!
只看楼主 加入收藏
ttrmsdsunsr
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-11-17
结帖率:33.33%
收藏
已结贴  问题点数:10 回复次数:7 
急!大神速来帮忙!冒泡法问题!
10个数冒泡
    for(i=0;i<9;i++)
        for(j=i;j<9;j++)
            if(a[j]<a[j+1])
            {
                ;
            }
            else
            {
                t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
            }
        
到底哪错了,大神帮帮忙。。
2014-12-06 15:41
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:4 
程序代码:
#include<stdio.h>

int main(void) {
    int i, j, t;
    int arr[10] = {9, 6, 3, 1, 4, 7, 8, 5, 0, 2}; //初始化供测试
    /************原序打印**************/
    for(i = 0; i < 10 ; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    /**************升序****************/
    for(i = 0; i < 9; i++) {
        for(j = 0 ; j < (9 - i); j++) {
            if(arr[j] > arr[j + 1]) {
                t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
        }
    }
    for(i = 0; i < 10 ; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
    /**************降序****************/
    for(i = 0; i < 9; i++) {
        for(j = 0 ; j < (9 - i); j++) {
            if(arr[j] < arr[j + 1]) {
                t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
        }
    }
    for(i = 0; i < 10 ; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}


[ 本帖最后由 longwu9t 于 2014-12-6 18:44 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2014-12-06 16:04
ttrmsdsunsr
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2014-11-17
收藏
得分:0 
回复 2 楼 longwu9t
大神。。。我只是个渣渣。。看不懂你写的。。
2014-12-06 17:50
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
我不是大神
你哪里看不懂
我看能否为你说明

Only the Code Tells the Truth             K.I.S.S
2014-12-06 17:54
a422880476
Rank: 2
来 自:湖南邵阳
等 级:论坛游民
帖 子:3
专家分:24
注 册:2014-11-28
收藏
得分:4 
for(i=0;i<9;i++)
        for(j=i;j<9-i;j++){
            if(a[j]<a[j+1])
            {
                t=a[j+1];
                a[j+1]=a[j];
                a[j]=t;
            }
           }
2014-12-06 17:55
a422880476
Rank: 2
来 自:湖南邵阳
等 级:论坛游民
帖 子:3
专家分:24
注 册:2014-11-28
收藏
得分:0 
这个泡可以冒
2014-12-06 17:56
longwu9t
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:小飞侠
威 望:6
帖 子:732
专家分:2468
注 册:2014-10-9
收藏
得分:0 
我起初给出的代码i<10是不严谨的 简单写了一下 没细看 已经修改了
应该是象你的给出的外循环的次数为数组长减1
以这个例子来说 就是9次外循环 数组下标i取值为0-8
而内循环的次数依外循环而递减

开始第一次外循环i=0
通过内循环比较前后两个元素(arr[i] arr[i+1])大小
第一次时arr[i] arr[i+1 就相当与 arr[j] = arr[j+1]
较大值的元素通过中间变量t来与后一个数组元素(较小的值)的交换取值
内循环每次就把相邻的两个元素中较大的值后置一次 直到内循环结束 最大的值被放置到数组的末尾
这样下一次外循环开始后 内循环要比较的就是 数组长 - 1 - i 次 ( i这时为1 除去了已经放在末尾的最大值)
再下一次外循环开始后 内循环要比较的就是 数组长 - 1 - i 次 ( i这时为2 除去了已经放在末尾的最大值和次最大值)
………………
内循环的次数依外循环而递减 就是这个意思


降序则相反

[ 本帖最后由 longwu9t 于 2014-12-6 19:17 编辑 ]

Only the Code Tells the Truth             K.I.S.S
2014-12-06 19:04
yangcaifei
Rank: 4
来 自:陕西
等 级:业余侠客
威 望:2
帖 子:127
专家分:216
注 册:2014-11-3
收藏
得分:4 
这个一定可以冒泡的

#include<stdio.h>
#define N 10

int main()
{
    int a[N],i,j,temp;
    printf("请输入元素:\n");
    for(i=0; i<N; i++)
    {
        scanf("%d",&a[i]);
    }
    for(i=0; i<N; i++)
    {
        for(j=N-1; j>=1; j--)
        {
            if(a[j]<a[j-1])
            {
                temp=a[j-1];
                a[j-1]=a[j];
                a[j]=temp;
            }
        }
    }
    for(i=0; i<N; i++)
    {
        printf("%d ",a[i]);
    }

    return 0;
}

[ 本帖最后由 yangcaifei 于 2014-12-6 20:59 编辑 ]
2014-12-06 20:19
快速回复:急!大神速来帮忙!冒泡法问题!
数据加载中...
 
   



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

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