zoukankan      html  css  js  c++  java
  • 冒泡排序

    冒泡排序的基本思想是:

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

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

     

     

    #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

  • 相关阅读:
    Linux删除文件相关命令
    Bing语句
    VS2013配置Winpcap
    node10-mongoose
    node09-cookie
    node08-express
    node07-http
    node06-path
    node05-fs
    node04-buffer
  • 原文地址:https://www.cnblogs.com/adelalove/p/8483430.html
Copyright © 2011-2022 走看看