大众计算机学习网欢迎诸位!收藏本站注 册登 陆
常用教程:基础知识网络知识操作系统WPS网页制作数据库算法网页成功之路网络安全最新技术古典mid流行midmid背景下载中心
您现在的位置:首页 > 教程 > 文章页

c冒泡算法

Admin | 2011-10-26 5:42:34 | ReadNums | 7395 | 标签 算法网页 | 打印本页
     

  一、c语言的冒泡算法的基本思想

  将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i]的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上“飘浮”。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。

  一般地,第i遍处理时,不必检查第i个位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。即就是在一组待排序的数据中,两两比较数据的大小,发现两个记录的排序次序相反时就交换位置,直到没有反序的记录为止。也就是说它重复地走访过要排序的序列,一次比较两个项目,如果他们的顺序错误就把他们交换过来。走访序列的工作是重复地进行直到没有再需要做交换动作,该序列已经排序完成。一趟冒泡,至少可以把值最大的元素送到最后位置(或最上边);当然也可以倒过来做,把值小的元素向前移或向下移,一趟冒泡,至少可以把值最小的元素送到最前面的位置(或最下边)。

  二、c语言冒泡算法的示例代码

  优化的冒泡排序法程序
  void BubbleSort (int R[ ], int n)
     { //R[1…n]是待排序的文件,采用自下向上扫描,对R做冒泡排序
       int  i, j;
       Boolean exchange ; //交换标志
       for(i=1; i<n; i++) 
   { //最多做n-1趟排序
       exchange=FALSE;   //本趟排序开始前,交换标志应为假
       for(j=n-1; j>=i; j--)   //对当前无序区R[i…n]自下向上扫描
          if(R[j+1]<R[j])   
  {//交换记录
            R[0]=R[j+1];      //R[0]不是哨兵,仅做暂存单元
            R[j+1]=R[j];        
   R[j]=R[0]; }
            exchange=TRUE;     //发生了交换,故将交换标志置为真         }
         if(!exchange)         //本趟排序未发生交换,提前终止算法
               return;     }          //endfor(外循环)
         }             //BubbleSort


问题未解决:在线咨询我要在线咨询问题

网友评论

(访客)
内容实用原创,讲得很好。
20xx年x月x日
(站长)
有问题请在线咨询。
20xx年x月x日