浅论冒泡排序算法

今天我和大家一起讨论下冒泡排序算法

冒泡排序算法,是一种神奇的算法,它是通过将相邻的2个数进行对比,依据从大到小,或者从小到大的顺序进行交换,最后得出排序结果,核心公式是i = n-1,j = n-1-i,i代表要进行多少趟的循环,j代表每趟需要进行多少次两两比较,如果有10个数,那么就只要循环9趟,每趟只需要比较n-1-i次;理论的不说太多,具体如下:

例如这里有10个数:15,32,12,16,90,49,17,26,72,43;我们按照从大到小的顺序排列.

第1趟:

第1次两两比较:2 15 12 16 90 49 17 26 72 43;   因为43比72小,所以不用交换

第2次两两比较:32 16 15 12 90 49 17 26 72 43;  因为72比26大,所以72和26进行交换;

第3次两两比较:32 16 15 12 90 49 26 17 72 43;

第4次两两比较:32 16 15 12 90 49 26 17 72 43;

第5次两两比较:32 16 15 12 90 49 26 17 72 43;

第6次两两比较:32 16 15 90 12 49 26 17 72 43;

第7次两两比较:32 16 90 15 12 49 26 17 72 43;

第8次两两比较:32 90 16 15 12 49 26 17 72 43;

               结果:90 32 16 15 12 49 26 17 72 43;


通过第一趟(9次两两比较)终于把10个数中的最大的数排在左边了.


接下来我们用程序来实现冒泡排序法,还是10个数,还是从大到小的顺序.

[plain]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /*使用冒泡排序法实现数组的从大到小排序*/  
  2. #include <stdio.h>  
  3. int main (void)  
  4. {  
  5.     int a[10];  
  6.     int i, j, t;            //变量t用来交换两个数的值  
  7.   
  8.     printf("Please input 10 numbers:\n");  
  9.     for (i=0; i< 10; i++)  
  10.     {  
  11.         printf("a[%d]=", i);            //使用循环让用户输入  
  12.         scanf("%d", &a[i]);  
  13.     }  
  14.   
  15.     /*开始对用户输入的数进行从大到小的排序*/  
  16.   
  17.     for (i=0; i < 9; i++)  
  18.     {  
  19.         for(j=0; j<9-i; j++)  
  20.         {  
  21.             if (a[j] < a[j+1])  
  22.             {  
  23.                 t = a[j];           //把较小的数的值赋给t  
  24.                 a[j] = a[j+1];         //把较大的数的值赋给较小的数  
  25.                 a[j+1] = t;         //把t的值赋给原来较大的数以完成交换  
  26.             }  
  27.         }  
  28.     }  
  29.     printf("\n");  
  30.     printf("排序后的结果为:\n");  
  31.     for (i=0; i<10; i++)  
  32.     {  
  33.         printf("%d ", a[i]);  
  34.     }  
  35.     printf("\n\n");  
  36.     getch();            //用于解决编写的可执行文件一闪而过的情况  
  37. }  
运行结果如下图:


最后送同学们一句话:编程路漫漫,需其修远兮;遇到难的程序,多单步调试,耐得住寂寞,才守得住繁华!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值