冒泡排序

冒泡排序的基本思想是:

相邻的元素进行两两比较,顺序相反则进行交换。

这样,每一趟会将最小或最大的元素“浮”到顶端,最终达到完全有序

 

 

#include<cstdio>
#include<algorithm>
using namespace std;
int a[120000],n;
int main()
{
    scanf("%d",&n);
    for(int i=1;i<=n;++i) scanf("%d",&a[i]);
    for(int i=1;i<=n;++i)
    {
        bool fg=1;
        //设定一个标记,若为true,则表示此次循环没有进行交换,
        //也就是待排序列已经有序,排序已然完成。
        for(int j=1;j<n;++j)
         if(a[j]>a[j+1])
         {
             swap(a[j],a[j+1]);
             fg=0;
         }
        if(fg) break;
    }
    for(int i=1;i<=n;++i) printf("%d ",a[i]);
    return 0;
}
View Code

根据上面这种冒泡实现,若原数组本身就是有序的(这是最好情况),仅需n-1次比较就可完成。

若是倒序,比较次数为 n-1+n-2+...+1=n(n-1)/2,交换次数和比较次数等值。

所以,其时间复杂度依然为O(n2

posted @ 2018-02-28 14:32  月亮茶  阅读(141)  评论(0编辑  收藏  举报