冒泡排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序相关的知识,希望对你有一定的参考价值。

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面.即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后.然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后.至此第一趟结束,将最大的数放到了最后.在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数).如此下去,重复以上过程,直至最终完成排序.

 

1.原始的冒泡排序算法

   void BubbleSort1 (DataType a,int n) 

   {  

    for (i=n;i>1;i--)

        {

              for (j=1;j<=i-1;j++)  

                 if(a[j].key>a.[j+1].key)   

            {  

                temp=a[j];a[j]=a[j+1];a[j+1]=temp;

              } 

                    } 

           } 

 

2.改进的冒泡排序算法

在冒泡排序过程中,一旦发现某一趟没有进行交换操作,就表明此时待排序记录序列已

经成为有序序列,冒泡排序再进行下去已经没有必要,应立即结束排序过程。

  void BubbleSort2 (DataType a,int n) 

    { 

      for (i=n;i>1;i--) 

       {  

          exchange=0;

          for (j=1;j<=i-1;j++)  

          if (a[j].key>a.[j+1].key) 

            { 

              temp=a[j];a[j]=a[j+1];a[j+1]=temp;exchange=1;

            }         

                if (exchange==0) break;

                    }   

     }

 

3.进一步地改进冒泡排序算法

在上面给出的冒泡排序算法的基础上,如果同时记录第i趟冒泡排序中最后一次发生交换操作的位置m(m<=n-i),就会发现从此位置以后的记录均已经有序,即无序区范围缩小在a[1]~a[m]之间,所以在进行下一趟排序操作时,就不必考虑a[m+1]~a[n]范围内的记录了,而只在a[1]~a[m]范围内进行

  void BubbleSort3 (DataType a,int n) 

   {  

    last=n-1;  

    for (i=n;i>1;i--)  

      {  exchange=0; 

        m=last;       //初始将最后进行记录交换的位置设置成i-1 

        for (j=1;j<=m;j++)  

          if(a[j].key>a.[j+1].key)

            { 

              temp=a[j];a[j]=a[j+1];a[j+1]=temp;

               exchange=1; 

               last=j;    //记录每一次发生记录交换的位置

               } 

              if (exchange==0) break;  

      }   

   } 

 

 

以上是关于冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

nodejs实现冒泡排序和快速排序

java编程的冒泡等排序示例

深度解析(十五)冒泡排序

冒泡排序

拓扑排序(图)、冒泡排序、插入排序

冒泡排序