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