基本思想:
將被排序的記錄數組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;/*如果本輪循環沒有發生數據交換,表示已經有序,沒有必要進行未完成的工作*/
}
}
當然還不夠完善,在進一步更改對於我們基本編程學習來說就不太“經濟”了。就此打住。