交换排序的基本思想是:两两比较待排序记录的关键字,发现两个记录的次序相反时即进行交换,直到没有反序的记录为止。
因为每一趟排序都使有序区增加了一个气泡,在经过n-1趟排序之后,有序区中就有n-1个气泡,而无序区中气泡的重量总是大于等于有序区中气泡的重量,所以整个冒泡排序过程至多需要进行n-1趟排序。
若在某一趟排序中未发现气泡位置的交换,则说明待排序的无序区中所有气泡均满足轻者在上,重者在下的原则,因此,冒泡排序过程可在此趟排序后终止。
代码如下:
void bubble(int a[],int n)
{
int i,j,temp;
bool exchange;
for (i=1;i<n;i++)//外循环,最多排 n-1 趟
{
exchange=false;
for (j=n-1;j>i;j--)//内循环,每趟比较的次数,第i趟比较 n-i 次
{
if (a[j+1]<a[j])
{
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
exchange=true;
}
if(!exchange)
return;
}
}
}