求解c语言冒泡排序法,两个for循环里到底是什么

求解c语言冒泡排序法,两个for循环里到底是什么求详细讲解,告诉我工作原理是什么,谢谢

这个应该到网上去搜索啊,不该在这问。
冒泡排序的原理就是:(升序)
 依次比较相邻的2个数,把较大的值放在后面,使最后一个数变成数组中的最大值。
 循环这个过程,直到所有的数据都按这个规则排列好。此时,排序完毕。
举例:3,2,5,7,1 (升序)
 1.  3与2比较,交换  ,数组:2,3,5,7,1
 2.  3与5比较, 不交换, 数组: 2,3,5,7,1
 3.  5与7比较, 不交换, 数组: 2,3,5,7,1
 4.  7与1比较, 交换  , 数组: 2,3,5,1,7

 第一次遍历比较完成,此时,最后一个数据就是最大值了。
 此后的比较,只要比较2,3,5,1即可,因为最后一个已经是最大的了。
 然后再按这个规则循环。   
 
 代码的话:
 #include <stdio.h>
 int main() {
   int i, j, t;
   int a[] = {3,2,5,7,1};
   int len = 5; //数组长度5
   //外层循环,就是按照这个算法:控制需要最多几次循环才能排序完毕
   for (i=0;i<len-1;i++) { //注意,只要比较len-1次循环
     //内层循环,就相当于上面1-4步,数据两两相比较
     for (j=0;j<len-i-1;j++) { //注意,比较次数是:len-i-1次
       if (a[j]>a[j+1]) {//相邻2个做比较
         t = a[j];a[j]=a[j+1];a[j+1]=t; //交换
       }
     }
   }
 }
 
 此即冒泡法排序。当然,冒泡还有一些变种,如:增加标志,如果某次循环中,没发生一次交换,则说明已经排序完毕。则结束循环,这样可以加快速度。

追问

好的太谢谢了

温馨提示:答案为网友推荐,仅供参考
相似回答