冒泡排序

上一篇 / 下一篇  2007-12-07 11:11:46

 

(1)对于数组a中的1至n个数据,先将第n个和第n-1个数据进行比较,如果
a(n)然后比较第n-1个和第n-2个数据;依次类推,直到第2个数据和第1个数据
进行比较交换,这称为一趟冒泡。这一趟最明显的效果是:将最小的数据传到了
第1位。由此还可推断出,对于n个数,一趟应该进行n-1 次比较操作。

(2)然后,对2至n个数据进行同样操作,则具有次小值的数据被安置在第2位
上。

(3)重复以上过程,每次的移动都向最终排序的目标前进,直至没有数据需要
交换为止。

----先选出最小的 排到最上面

具体算法
  void BubbleSort(SeqList R)
   { //R(l..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].key<R[j-1].key){//交换记录
          R[0]=R[j]; //R[0]不是哨兵,仅做暂存单元
          R[j]=R[j-1];
          R[j-1]=R[0];
          exchange=TRUE; //发生了交换,故将交换标志置为真
         }
       if(!exchange) //本趟排序未发生交换,提前终止算法
             return;
     } //endfor(外循环)
    } //BubbleSort


TAG:

 

评分:0

我来说两句

日历

« 2024-04-27  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 1352
  • 日志数: 2
  • 建立时间: 2007-11-20
  • 更新时间: 2007-12-07

RSS订阅

Open Toolbar