Welcome 微信登录

首页 / 操作系统 / Linux / 关于冒泡排序算法

今天我和大家一起讨论下冒泡排序算法冒泡排序算法,是一种神奇的算法,它是通过将相邻的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 print?
  1. /*使用冒泡排序法实现数组的从大到小排序*/ 
  2. #include <stdio.h> 
  3. int main (void) 
  4.     int a[10]; 
  5.     int i, j, t;            //变量t用来交换两个数的值 
  6.  
  7.     printf("Please input 10 numbers: "); 
  8.     for (i=0; i< 10; i++) 
  9.     { 
  10.         printf("a[%d]=", i);            //使用循环让用户输入 
  11.         scanf("%d", &a[i]); 
  12.     } 
  13.  
  14.     /*开始对用户输入的数进行从大到小的排序*/ 
  15.  
  16.     for (i=0; i < 9; i++) 
  17.     { 
  18.         for(j=0; j<9-i; j++) 
  19.         { 
  20.             if (a[j] < a[j+1]) 
  21.             { 
  22.                 t = a[j];           //把较小的数的值赋给t 
  23.                 a[j] = a[j+1];         //把较大的数的值赋给较小的数 
  24.                 a[j+1] = t;         //把t的值赋给原来较大的数以完成交换 
  25.             } 
  26.         } 
  27.     } 
  28.     printf(" "); 
  29.     printf("排序后的结果为: "); 
  30.     for (i=0; i<10; i++) 
  31.     { 
  32.         printf("%d ", a[i]); 
  33.     } 
  34.     printf(" "); 
  35.     getch();            //用于解决编写的可执行文件一闪而过的情况 
/*使用冒泡排序法实现数组的从大到小排序*/#include <stdio.h>int main (void){int a[10];int i, j, t;//变量t用来交换两个数的值printf("Please input 10 numbers: ");for (i=0; i< 10; i++){printf("a[%d]=", i);//使用循环让用户输入scanf("%d", &a[i]);}/*开始对用户输入的数进行从大到小的排序*/for (i=0; i < 9; i++){for(j=0; j<9-i; j++){if (a[j] < a[j+1]){t = a[j]; //把较小的数的值赋给ta[j] = a[j+1]; //把较大的数的值赋给较小的数a[j+1] = t; //把t的值赋给原来较大的数以完成交换}}}printf(" ");printf("排序后的结果为: ");for (i=0; i<10; i++){printf("%d ", a[i]);}printf(" ");getch();//用于解决编写的可执行文件一闪而过的情况}运行结果如下图: 最后送同学们一句话:编程路漫漫,需其修远兮;遇到难的程序,多单步调试,耐得住寂寞,才守得住繁华!本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-01/139679.htm