全国等考中冒泡排序的改进

基本思想:
将被排序的记录数组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;/*如果本轮循环没有发生数据交换,表示已经有序,没有必要进行未完成的工作*/

       }

}
当然还不够完善,在进一步更改对于我们基本编程学习来说就不太“经济”了。就此打住。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章