(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