冒泡排序

改进版冒泡排序:在一轮迭代中,如果没有发生交换的话,这就说明了待排序的元素已经是排序好的,可以直接退出迭代。最坏情况下时间复杂度为O(n),平均复杂度也为O(n)。
  源代码如下:

template<typename T>
void bubbingSort(T* a,int length)
{
    for (bool sorted = false; sorted = !sorted; length--)//注意sorted的初始化为false后经过 != 运算为true
    {
        for (int i = 1; i < length; i++)//length--,待排序的规模逐渐减小
        {
            if (a[i - 1] > a[i])//小到大排序
            {
                T temp = a[i-1];
                a[i - 1] = a[i];
                a[i] = temp;
                sorted = false;//发生交换,就预示着要进行下一轮迭代
            }
        }
    }
}

分析
在冒泡排序中,数据的比较和移动是在相邻单元中进行的,每次交换只能上移或下移一个位置,*同时比较过的数据,在下一遍比较时,有可能再次被比较,产生冗余比较。因此,冒泡排序的总比较次数和移动次数较多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容