正文

[044] 起泡排序2006-03-25 21:15:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/wentao/11395.html

分享到:

<谭> 例7.3

用起泡法对10个数排序(由小到大)

若有n个数。第一次将第1和第2个数比较,若第1个数大于第2个数,刚两数对调,否则不操作。第二次将第2和第3个数比较,如上操作,刚经过n-1次这样的操作,最大的数排到了最后(即所谓的沉底)。以上为第一趟操作的结果。第二趟要对余下的n-1个数作同样的操作(因为最大的数已排到最后,不必考虑)。第二趟中要作n-2次比较……依次类推可得出结论:n个数排序,要进行n-1趟比较。第一趟中比较n-1次,第 i 趟中比较 n-i 次

#include <stdio.h>
int main()
{
    int a[11]; /* 为了符合习惯, 第0号元素不用 */
    int i, j, cup;
    printf("Input 10 numbers:\n");

    for(i = 1; i < 11; i++)
        scanf("%d", &a[i]);
    for(i = 1; i <= 9; i++)           /* 趟数 */
        for(j = 1; j <= 10 - i; j++)  /* 每趟要比较数 */
            if(a[j] > a[j+1])         /* 前面数大于后面数刚对调 */
            {
                cup = a[j];
                a[j] = a[j+1];
                a[j+1] = cup;
            }

    printf("The sorted numbers:\n");
    for(i = 1; i <11; i++)
        printf("%d ", a[i]);
    return 0;
}

运行结果:
=============================================
Input 10 numbers:
4 23 68 -29 9 10 -500 799 88 -4↙
The sorted numbers:
-500 -29 -4 4 9 10 23 68 88 799
=============================================

其执行过程分析:

第1趟: 
          第1次:  4    23   68  -29    9     10  -500   799    88     -4
          第2次:  4    23   68  -29    9     10  -500   799    88     -4
          第3次:  4    23   -29  68    9     10  -500   799    88     -4
          第4次:  4    23   -29    9  68     10  -500   799    88     -4
          第5次:  4    23   -29    9  10     68  -500   799    88     -4
          第6次:  4    23   -29    9  10  -500     68   799    88     -4
          第7次:  4    23   -29    9  10  -500     68   799    88     -4
          第8次:  4    23   -29    9  10  -500     68    88   799     -4

          第9次:  4    23   -29    9  10  -500     68    88     -4   799

第2趟:
          第1次:  4    23      9  -29  -500    10     68    -4     88   799 
          第2次:  4    23   -29     9  10    -500     68    88     -4   
799
          第3次:  4    23      9  -29  10    -500     68    88     -4   799
          第4次:  4    23      9  -29  10    -500     68    88     -4   799
          第5次:  4    23      9  -29  -500    10     68    88     -4   799
          第6次:  4    23      9  -29  -500    10     68    88     -4   799
          第7次:  4    23      9  -29  -500    10     68    88     -4   799
          第8次:  4    23      9  -29  -500    10     68    -4     88   799

……

第9趟:
          第1次:  -500 -29  
-4   4    9   10     23     68     88   799




为验证以上推论,改写程序如下:

#include <stdio.h>
int main()
{
    int a[11];
    int i, j, k, cup;
    printf("Input 10 numbers:\n");

    for(i = 1; i < 11; i++)
        scanf("%d", &a[i]);
    for(i = 1; i <= 9; i++)
    {  
        printf("i=%d: \n\n", i);
        for(j = 1; j <= 10 - i; j++)
        {
            if(a[j] > a[j+1])         
            {
                cup = a[j];
                a[j] = a[j+1];
                a[j+1] = cup;
            
}
            printf("    j=%d: ", j);
            for(k = 1; k < 11; k++)
                printf("%5d ", a[k]);
            printf("\n");
        }
        printf("\n\n");
    }
    return 0;
}

运行结果:
=========================================================================
Input 10 numbers:
4 23 68 -29 9 10 -500 799 88 -4↙
i=1:

    j=1:     4    23    68   -29     9    10  -500   799    88    -4
    j=2:     4    23    68   -29     9    10  -500   799    88    -4
    j=3:     4    23   -29    68     9    10  -500   799    88    -4
    j=4:     4    23   -29     9    68    10  -500   799    88    -4
    j=5:     4    23   -29     9    10    68  -500   799    88    -4
    j=6:     4    23   -29     9    10  -500    68   799    88    -4
    j=7:     4    23   -29     9    10  -500    68   799    88    -4
    j=8:     4    23   -29     9    10  -500    68    88   799    -4
    j=9:     4    23   -29     9    10  -500    68    88    -4   799


i=2:

    j=1:     4    23   -29     9    10  -500    68    88    -4   799
    j=2:     4   -29    23     9    10  -500    68    88    -4   799
    j=3:     4   -29     9    23    10  -500    68    88    -4   799
    j=4:     4   -29     9    10    23  -500    68    88    -4   799
    j=5:     4   -29     9    10  -500    23    68    88    -4   799
    j=6:     4   -29     9    10  -500    23    68    88    -4   799
    j=7:     4   -29     9    10  -500    23    68    88    -4   799
    j=8:     4   -29     9    10  -500    23    68    -4    88   799


i=3:

    j=1:   -29     4     9    10  -500    23    68    -4    88   799
    j=2:   -29     4     9    10  -500    23    68    -4    88   799
    j=3:   -29     4     9    10  -500    23    68    -4    88   799
    j=4:   -29     4     9  -500    10    23    68    -4    88   799
    j=5:   -29     4     9  -500    10    23    68    -4    88   799
    j=6:   -29     4     9  -500    10    23    68    -4    88   799
    j=7:   -29     4     9  -500    10    23    -4    68    88   799


i=4:

    j=1:   -29     4     9  -500    10    23    -4    68    88   799
    j=2:   -29     4     9  -500    10    23    -4    68    88   799
    j=3:   -29     4  -500     9    10    23    -4    68    88   799
    j=4:   -29     4  -500     9    10    23    -4    68    88   799
    j=5:   -29     4  -500     9    10    23    -4    68    88   799
    j=6:   -29     4  -500     9    10    -4    23    68    88   799


i=5:

    j=1:   -29     4  -500     9    10    -4    23    68    88   799
    j=2:   -29  -500     4     9    10    -4    23    68    88   799
    j=3:   -29  -500     4     9    10    -4    23    68    88   799
    j=4:   -29  -500     4     9    10    -4    23    68    88   799
    j=5:   -29  -500     4     9    -4    10    23    68    88   799


i=6:

    j=1:  -500   -29     4     9    -4    10    23    68    88   799
    j=2:  -500   -29     4     9    -4    10    23    68    88   799
    j=3:  -500   -29     4     9    -4    10    23    68    88   799
    j=4:  -500   -29     4    -4     9    10    23    68    88   799


i=7:

    j=1:  -500   -29     4    -4     9    10    23    68    88   799
    j=2:  -500   -29     4    -4     9    10    23    68    88   799
    j=3:  -500   -29    -4     4     9    10    23    68    88   799


i=8:

    j=1:  -500   -29    -4     4     9    10    23    68    88   799
    j=2:  -500   -29    -4     4     9    10    23    68    88   799


i=9:

    j=1:  -500   -29    -4     4     9    10    23    68    88   799


=========================================================================


可见对于该组数据实际上在i=7, j=3 时已经得到最终结果。


阅读(4003) | 评论(4)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

loading...
您需要登录后才能评论,请 登录 或者 注册