排序之冒泡排序

原创 2016年05月31日 17:27:58

本文以《啊哈!算法》为教材,个人理解整理。

例:将5个数字进行从大到小排序后输出。
  输入:35 99 18 12 76
  输出:99 76 35 18 12

对于例,冒泡排序大致的思路就是一趟一趟地循环比较,每一次循环的目的都是将未排序的数字中最小的数字移动到末尾。如:
  第一趟:XX XX XX XX 12
  第二趟:XX XX XX 18 12
  第三趟:XX XX 35 18 12
  第四趟:99 76 35 18 12

在分析时,我们先不考虑第一、二、三趟前面“XX”的数字是什么情况,只需要知道在末尾我们想要得到的是如以上的结果。在第四趟按照前三趟的规律可以确定76,剩下第一个“XX”的位置显然除了99就没有其他了,所以不需要进行第五趟。

通过以上分析已经可以知道,如果我们要排序n个数字,只需要进行n-1趟循环即可。

然后考虑每一趟如何将最小的数字归位。冒泡排序的方法是逐个两两比较大小,如果前者小于后者就交换位置,如:
(初始为35 99 18 12 76)
 第一趟的移动过程:
  99 35 18 12 76(比较了第1位和第2位,交换了位置)
  99 35 18 12 76(比较了第2位和第3位,没有交换位置)
  99 35 18 12 76(比较了第3位和第4位,没有交换位置)
  99 35 18 76 12(比较了第4位和第5位,交换了位置)

以上是第一趟的移动过程,显然第二趟移动过程是基于第一趟的结果的,即
初始为99 35 18 76 12
 第二趟的移动过程:
  99 35 18 76 12(未交换)
  99 35 18 76 12(未交换)
  99 35 76 18 12(交换)

 第三趟的移动过程:
  99 35 76 18 12(未交换)
  99 76 35 18 12(交换)

 第四趟的移动过程:
  99 76 35 18 12(未交换)

以上是四趟所有的交换过程,分析可以发现由于第一趟已经将12归位,即确定了12是这5个数字中最小的,因此在第二趟中就没有必要再把第4位和第5位进行比较,同理,第三趟不需要比较第3位和第4位,第4位和第5位。因此可知第一趟比较4次,第二趟比较3次,第三趟比较2次,第四趟比较1次,可以发现:趟的次序 + 比较次数 = 数字个数

用C语言表示,首先要获取5个待排序的数字,然后进行排序,最后输出。其中排序是一个双重嵌套循环,第一层循环表示循环“几趟”,如5个数字要4趟,6个数字要5趟,n个数字要n-1趟。第二层循环表示每趟要循环“比较几次”,上面分析已知:比较次数 = 数字个数 - 趟的次序。

int main()
{
    int a[5], i, j, t;
    for(i = 0; i < 5; i++)
    {
        scanf("%d", &a[i]); //获取5个待排序的数字 
    }

    for(i = 0; i < 4; i++) //5个数字需要进行4趟比较 
    {
        for(j = 0; j < 4-i; j++) //第一趟比较4次,第二趟比较3... 
        {
            if(a[j] < a[j+1])
            {
                t = a[j]; a[j] = a[j+1]; a[j+1] = t;
            }
        }
    }
    for(i = 0; i < 5; i++)
    {
        printf("%d ", a[i]);
    }
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

冒泡排序以及二分法查询

  • 2017年11月09日 23:15
  • 275B
  • 下载

冒泡排序VB版

  • 2015年03月28日 21:43
  • 27KB
  • 下载

Java中的冒泡排序算法实现

巴黎的告白气球 2017-01-12 11:49 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走...

vs2010 冒泡排序

  • 2015年05月10日 15:48
  • 1.09MB
  • 下载

二分查找算法和冒泡排序算法

  • 2015年04月22日 11:27
  • 942KB
  • 下载

利用Python实现冒泡排序

今天说一个比较简单易懂的算法,相信大家在大学里面肯定都有接触过。在这里介绍排序算法的一种冒泡排序,对于初学Python的新人来说因该很容易理解。...

奇偶冒泡排序

  • 2016年03月30日 22:08
  • 1KB
  • 下载

冒泡排序C语言

  • 2016年02月18日 18:57
  • 652B
  • 下载

用PHP如何实现冒泡排序

1、首先我们必须弄清楚什么是冒泡排序,不理解冒泡排序的原理,我们就无法写出代码。 冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比...

冒泡排序,舞动的bubble111

  • 2016年01月06日 23:06
  • 50MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序之冒泡排序
举报原因:
原因补充:

(最多只允许输入30个字)