将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
代码如下:
void PaopaoSort(int data[],int num)
{
int m,temp;
for(int i=0;i<num-1;i++)
{
for(m=1;m<num-i;m++)
{
if(data[num-m]<data[num-1-m])
{
temp=data[num-m-1];
data[num-m-1]=data[num-m];
data[num-m]=temp;
}
}
}
}
这是基本版,但是此会不停的循环,若中途已经成功了,仍然会继续,所以设置一个flag标志
改进版:
void PaopaoSort(int data[],int num)
{
int m,temp;
bool exchange;
for(int i=0;i<num-1;i++)
{
exchange=true;
for(m=1;m<num-i;m++)
{
if(data[num-m]<data[num-1-m])
{
temp=data[num-m-1];
data[num-m-1]=data[num-m];
data[num-m]=temp;
exchange=false;
}
}
if(exchange)
return;
}
}