全國等考中冒泡排序的改進

基本思想:
將被排序的記錄數組R[1..n]垂直排列,每個記錄R[i]看作是重量爲R[i].key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從上往下掃描數組R:凡掃描到違反本原則的輕氣泡,就使其向上"飄浮"。如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下爲止。
2WDragon
相關代碼如下:
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;/*如果本輪循環沒有發生數據交換,表示已經有序,沒有必要進行未完成的工作*/

       }

}
當然還不夠完善,在進一步更改對於我們基本編程學習來說就不太“經濟”了。就此打住。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章