图文解析冒泡排序法

       在C语言的各种循环语句里面循环了几天,很庆幸自己没有变成死循环,对冒泡排序法理解的比较透彻就是最好的证明,想要循环而且不成为死循环这就是最基本的哦,下面我就带大家来解析一下冒泡排序法。

       首先这种方法的作用就是将一串数字重新排列,可以从小到大也可以从大到小,根据个人需要。下面我先贴出一个最典型的用冒泡排序从大到小排列数据的代码:

#include<stdio.h>
int main(void){
 int a[7]={1,7,2,10,20,70,54},b,c,d;
 for(b=0;b<6;b++){
  for(c=0;c<6;c++){
   if(a[c]<a[c+1]){
    d=a[c],a[c]=a[c+1],a[c+1]=d;
   }
  }
 }for(b=0;b<7;b++){printf("%d   ",a[b]);
 
} }

     我们来分析一下,要使一串数字从大到小排列我们该如何着手。首先看上面这个代码,我们有a[0]到a[6]这7个数字,要想将他们从大到小排列肯定不是一次就能够做完的(你要说你一下就看出来了其实也不是,因为你脑中做出了很多次分析判断,只是时间很短你觉得你一下就看出来了,计算机可以看做就是要把这些判断都写出来。)所以,我们肯定要让他们不断循环比较最后得出结果。我们该如何做?既然我们引入了数组这个概念,那么我们的循环就更好实现了,我们的思路就是:不断从第一个数开始让他与他后面一个数进行比较,如果他更小那么就与他后面那个数交换位置,我们这里有7个数那么就是“第一个数与第二个数比较之后第二个数与第三个数比较之后第三个数与第四个数比较。。。。”一直到第6个数与第七个数比较,一共比较6次,那么我们就要循环6次,但这样一次只能够讲一个最小的数字排到最后,我们要排6个数字下去,所以还要循环6次这种循环。这很好理解吧,下面贴出图片图文解析冒泡排序法

(这张图片第6步那里还要循环一次得出最终结果)分析完之后我们就开始写代码,首先声明a[7]把6个数字存入这个数组,然后再声明3个变量,其中两个(b,c)用来做循环,另一个(d)用来作为一个数与后一个数交换数值的暂时的容器。写出“ for(b=0;b<6;b++){
for(c=0;c<6;c++){”这个语句表示“b=0”的时候执行c分别等于012345所对应的语句,b=1的时候再次执行c分别等于012345的语句,如此循环执行6次。c这个for循环所执行的语句

”   if(a[c]<a[c+1]){

 d=a[c],a[c]=a[c+1],a[c+1]=d;
   }“”

用了if判断语句,从a[0]开始,如果这个数小于下一个数则执行“d=a[c],a[c]=a[c+1],a[c+1]=d;”将他们数值交换。“注意:如果你需要把一个变量的值赋给另一个变量,那么这个变量要写在”=“右边“。

最后,在上面全部都(说白了就是6*6=36次循环),都循环完之后,在他们所有”循环语句外面“输出我们要的结果,结果当然也要循环,因为我们不是要一个数字或者一串字符,我们是要7个数字(注意这里我们要7个数字,所以要循环7次,得出a[0]到a[6]这7个结果)。以此类推从小到大排列的话,只需要把if()判断那里改成(a[c]>a[c+1])就行了,很简单的。

转载于:https://my.oschina.net/Ztachi/blog/178594