| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1597 人关注过本帖
标题:冒泡排序
只看楼主 加入收藏
dfmlpx
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2016-5-30
结帖率:50%
收藏
已结贴  问题点数:20 回复次数:11 
冒泡排序
若用冒泡排序法对序列18,14,6,27,8,12,16,52,10,26,47,29,41,24从小到大进行排序,其要进行(     )次比较。
   A)33              B)45           C)70         D)91
2016-06-30 15:27
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9026
专家分:54030
注 册:2011-1-18
收藏
得分:3 
14个数
第一遍比较13次
第二遍比较12次
第三遍比较11次
……
所以结果是 13*14/2 = 91

楼主说70,其实也有可能,因为题目中只说了“冒泡排序”,并没有约定细节,比如各种优化手段。所以最好的办法是问一下你的老师,将你老师给的“冒泡排序”的完整描述贴出来。[color=#000000]|

void fun1( void )
{
    int buf[14] = { 18,14,6,27,8,12,16,52,10,26,47,29,41,24 };
    unsigned cmp_cnt = 0;

    for( size_t i=1; i!=14; ++i )
    {
        for( size_t j=0; j!=14-i; ++j )
        {
            if( buf[j] > buf[j+1] )
            {
                int tmp = buf[j];
                buf[j] = buf[j+1];
                buf[j+1] = tmp;
            }
            ++cmp_cnt;
        }
    }

    printf( "[%u]", cmp_cnt );
    for( size_t i=0; i!=14; ++i )
        printf( ", %d", buf[i] );
    printf( "\n" );
}

void fun2( void )
{
    int buf[14] = { 18,14,6,27,8,12,16,52,10,26,47,29,41,24 };
    unsigned cmp_cnt = 0;

    for( size_t i=1; i!=14; ++i )
    {

        int b_ok = 1;[/color]
        for( size_t j=0; j!=14-i; ++j )
        {
            if( buf[j] > buf[j+1] )
            {
                int tmp = buf[j];
                buf[j] = buf[j+1];
                buf[j+1] = tmp;

                b_ok = 0;
            }
            ++cmp_cnt;
        }
        if( b_ok )
            break;

    }

    printf( "[%u]", cmp_cnt );
    for( size_t i=0; i!=14; ++i )
        printf( ", %d", buf[i] );
    printf( "\n" );
}



[此贴子已经被作者于2016-7-1 14:02编辑过]

2016-06-30 15:46
dfmlpx
Rank: 1
等 级:新手上路
帖 子:9
专家分:7
注 册:2016-5-30
收藏
得分:0 
回复 2楼 rjsp
答案是70
2016-06-30 17:14
pxpny
Rank: 1
等 级:新手上路
帖 子:3
专家分:5
注 册:2016-6-30
收藏
得分:3 
91是对的......
2016-06-30 17:34
张小鉴
Rank: 1
等 级:新手上路
帖 子:3
专家分:4
注 册:2016-6-30
收藏
得分:3 
91次。
2016-07-01 11:40
平常心q
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:7
帖 子:120
专家分:550
注 册:2016-3-31
收藏
得分:3 
确实是91次,答案错了,要相信自己
2016-07-01 11:45
wanglianyi1
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:14
帖 子:647
专家分:2067
注 册:2015-6-18
收藏
得分:3 
你写一个排序程序加一个变量记录下比较的次数看看
2016-07-01 12:35
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:3 
如果要求是:用冒泡排序法......最小的比较次数,可能是70。
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
#include<stdio.h>

void _Swap(int &a, int &b)
{
    int c = a;
    a = b;
    b = c;
}

void _Printf(int a[], int n)
{
    for (int i=0; i<n; i++)
        printf("%d ", a[i]);
    putchar('\n');
}

int _Sort1(int a[], int n)
{
    int count = 0;
    for (int i=0; i<n; i++)
    {
        for (int j=1; j<n-i; j++)
        {
            count++;
            if (a[j-1] > a[j])
                _Swap(a[j-1], a[j]);
        }
    }
    return count;
}

int _Sort2(int a[], int n)
{
    int count = 0;
    int k = n;
    bool flag = true;
    while (flag)
    {
        flag = false;
        for (int j=1; j<k; j++)
        {
            count++;
            if (a[j-1] > a[j])
            {
                _Swap(a[j-1], a[j]);
                flag = true;
            }
        }
        k--;
    }
    return count;
}

main()
{
    int n = 14;
    int a1[] = {18,14,6,27,8,12,16,52,10,26,47,29,41,24};
    int a2[] = {18,14,6,27,8,12,16,52,10,26,47,29,41,24};
    _Printf(a1, n);
    int count = _Sort1(a1, n);
    _Printf(a1, n);
    printf("方法一比较次数:%d\n", count);
    count = _Sort2(a2, n);
    _Printf(a2, n);
    printf("方法二比较次数:%d\n", count);
}

2016-07-01 16:05
zhulei1978
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:53
帖 子:1351
专家分:1200
注 册:2006-12-17
收藏
得分:0 
他不一定完全比较的,有一次排序过程中没有进行交换的话就结束排序

其实我就是改变社会风气,提高少女素质,刺激电影市道,提高年轻人内涵,玉树临风,风度翩翩的整蛊专家,我名叫古晶,英文名叫JingKoo!
2016-07-01 16:56
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:3 
总的比循环次数是最大上浮位数+1。
18,14,6,27,8,12,16,52,10,26,47,29,41,24这组数最大上浮数是10,上浮位数是6,
所以循环7次得出的次数是:13+12+11+10+9+8+7=70;
知道这个算数式有个大前提就是你要知道比较70次的代码是怎么写的。
2016-07-02 07:42
快速回复:冒泡排序
数据加载中...
 
   



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

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