Dzwebs.Net

撰写电脑技术杂文十余年

c冒泡算法

Admin | 2011-10-26 5:42:34 | 被阅次数 | 20905

温馨提示!

如果未能解决您的问题,请点击搜索;登陆可复制文章,点击登陆

  一、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


该杂文来自: 算法杂文

上一篇:C解决阶乘之和的代码

下一篇:C语言八进制转换为十进制

网站备案号:

网站备案号:滇ICP备11001339号-7

版权属性:

Copyright 2007-2021-forever Inc. all Rights Reserved.

联系方式:

Email:dzwebs@126.com QQ:83539231 访问统计