经典排序算法-冒泡排序

冒泡排序原理:输入序列中,相邻的数两两比较,将最大的数冒向水面(此处的水面定义为序列的最右端,进行增序排列);故在第i次冒泡时,序列的后i-1个数将不再被考虑;因而循环的层次为:外循环i=0到n-1(n为待排序列的长度),内循环是j=1到n-i。 所以理论上来说,冒泡排序执行1+2+.......(n-1)=n*(n-1)/2次,时间复杂度为0(n^2),当输入序列已排序完毕时,时间复杂度最好,为O(n)。实际编程时,我们可以引入flag标志位来优化程序,减少不必要的内层循环次数。

代码范例:

template <typename T>

void bubblesort(T* arr, int length)

{

    int flag;

    T tmp;

    for (int i=0; i<length; i++)

    {

       flag=0;  //标志位

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

       {

           if(arr[j]<arr[j-1])   //相邻数,两两比较,若有需要,进行数据交换。

           {

               flag=1;

               tmp=arr[j-1];

               arr[j-1]=arr[j];

               arr[j]=tmp;

            }

       }

        if(flag==0)

          break;

     }

}

posted @ 2016-09-17 19:02  雨落无声2002  阅读(157)  评论(0编辑  收藏  举报