• 冒泡排序(C语言)解析


         排序算法是一种重要的、基本的算法。排序的方法有很多,在这里给大家讲解一下“冒泡法排序”。

    “冒泡排序”的基本思路是:每次将相邻两个数比较,将小的调到前头(本例默认是按递增排列)。

    若有6个数:9,8,5,4,2,0。

      第一次先将最前面的两个数 8 和 9 对调(见图1)。

      第 2 次将第 2 和第 3 个数( 9 和 5)对换……如此共进行5次,

        得到 8 - 5 - 4 - 2 - 0 - 9的顺序。

      可以看出:最大的数 9 已经“沉底”,成为最下面一个数,而小的数则“上升”。最小的数 0 已向上“浮起”一个位置。经过第一趟(共计5次比较与交换)后,

      已得到最大的数9。

      然后进行第 2 趟比较,对余下的前面 5 个数(8,5,4,2,0)进行新一轮的比较,

      以便使次大的数“沉底”。按以上方法进行第 2 趟比较,见图2。

      经过这一趟 4 次比较与交换,得到次大的数 8。

     

      按此规律进行下去,可以推出,对 6 个数要比较 5 趟,才能使 6 个数大小顺序排列。

      在第一趟中要进行两个数之间的比较共 5 次,在第 2 趟过程中比较 4 次……

      第 5 趟只需比较 1 次。

      由此推出,如果有 n 个数,则要进行 n - 1 趟比较。在第一趟比较中要进行 n - 1 次两两比较,在第 j 趟比较中要进行 n - j 次两两比较。

     再次分析排序的过程,原来 0 是最后一个数,经过第 1 趟比较与交换,0 上升为第 5 个数(最后第 2 个数)。再经过第 2 趟比较与交换,

    0 上升为第 4 个数(最后第 3 个数)。再经过第 3 趟比较与交换,0 上升为第 3 个数……每经过一趟的比较与交换,最小的数“上升”一位,

    最后升到第一个数。这如同水底的气泡逐步冒出水面一样,故称为“冒泡法”,或“起泡法”。

    据此画出流程图(图3)(假设n = 10)

    代码(c语言):

     1 #include<stdio.h>
     2 int main()
     3 {
     4     int a[10];
     5     int i,j,t;
     6     printf("input 10 numbers :\n");//输入 
     7     for(i = 0;i < 10; i++)         //数组 
     8         scanf("%d",&a[i]);         //a[0]~a[9] 
     9     printf("\n");
    10     for(j = 0; j < 9; j++)
    11         for(i = 0;i < 9-j; i++)  //冒泡排序 
    12         if(a[i] > a[i+1])        //核心算法 
    13         {
    14                 t = a[i];
    15             a[i] = a[i+1];
    16             a[i+1] = t;
    17         }
    18     printf("the sorted numbers :\n");
    19     for(i = 0;i < 10; i++)      //输出 
    20         printf("%d ",a[i]);     //数组 
    21     printf("\n");                
    22     return 0;
    23 }

    输出/输出结果:

    上述起泡排序的最坏情况是数组 a 的初态为降序,在此最坏情况下的素颜发时间复杂度为 T(n) = O(n^2)。

    一般情况下,除特别指明外,算法的时间复杂度均指最坏情况下的时间复杂度。

  • 相关阅读:
    洛谷P1071 潜伏者
    2019BJFU 网站设计(孙俏-web前端开发)实验代码-181002222
    反思——P1307 数字反转
    洛谷P1067 多项式输出
    湖南大学第十五届程序设计竞赛(重现赛)
    2019河北省大学生程序设计竞赛(重现赛)
    2019BJFU C++实验习题(完结)
    配置android source 在ubuntu中编译环境
    Android屏幕保持唤醒状态
    Android richtext
  • 原文地址:https://www.cnblogs.com/denglw/p/6765160.html
Copyright © 2020-2023  润新知