双向冒泡排序,又名鸡尾酒混合排序,是对冒泡排序的一种改进算法。
每完成一次循环就将最大元素排在队尾,最小值排到队头,时间成本能节约1倍。
其算法如下:
void DoubleBubbleSort(int r[],int size)
{
int i,low=0,high=size-1,temp;
bool exchange;
while(low<high)
{
exchange=false;
//从前往后进行一次冒泡排序,将最大的值放在最后一个位置
for(i=low;i<high;++i)
{
if(r[i]>r[i+1]) //如果前面的值比后面的值大,发生交换
{
temp=r[i];
r[i]=r[i+1];
r[i+1]=temp;
exchange=true;
}
}
//从后往前进行一次冒泡排序,将最小的值放在第一个位置
for(i=high-1;i>low;--i)
{
if(r[i]<r[i-1]) //如果后面的值比前面的值小,发生交换
{
temp=r[i];
r[i]=r[i-1];
r[i-1]=temp;
exchange=true;
}
}
if(!exchange) //本趟没有发生交换,提前终止
return;
//更新上下边界
++low;
--high;
}
}