基本思想:
将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从上往下扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
将被排序的记录数组R[1..n]垂直排列,每个记录R[i]看作是重量为R[i].key的气泡。根据轻气泡不能在重气泡之下的原则,从上往下扫描数组R:凡扫描到违反本原则的轻气泡,就使其向上"飘浮"。如此反复进行,直到最后任何两个气泡都是轻者在上,重者在下为止。
void sort(int *p,int n)
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<n-1;j++)
if(p[j]>p[j+1])
{
p[j]+=p[j+1];
p[j+1]=p[j]-p[j+1];
p[j]=p[j]-p[j+1];
}
}
实际我们在用时可以考虑一下效率问题,比如可以简单的改写为:
void sort(int *p,int n)
{
int i,j,flag;
for(i=0;i<n-1;i++)
{
flag=0;
for(j=0;j<n-1;j++)
if(p[j]>p[j+1])
{
p[j]+=p[j+1];
p[j+1]=p[j]-p[j+1];
p[j]=p[j]-p[j+1];
flag=1;
}
if(flag==0) break;/*如果本轮循环没有发生数据交换,表示已经有序,没有必要进行未完成的工作*/
}
}
当然还不够完善,在进一步更改对于我们基本编程学习来说就不太“经济”了。就此打住。