• 冒泡排序


    1. 问题描述

    输入:n个数的序列<a1,a2,a3,...,an>。
    输出:原序列的一个重排<a1*,a2*,a3*,...,an*>;,使得a1*<=a2*<=a3*<=...<=an*。

    2. 问题分析

    冒泡排序:这一种最为简单的排序算法,每一次从数列中选取最大(最小)的数,然后把它放在最后(前面),重复执行此操作,直至所有数据有序。


    3. 算法实现

    template <typename T>
    void BubbleSort( CVector<T> &vec  )
    {
        size_t n = vec.GetSize();
        for ( size_t i =0; i<n-1; i++ )
        {
            for ( size_t j=0; j<n-i-1; j++ )
            {
                if( vec[j] > vec[j+1] )
                {
                    Swap<T>( vec[j], vec[j+1] );
                }
            }//for j
        }//for i
    }

    测试:

    #define  DATA_MAGNITUDE 1000
    
    double random(double start, double end)
    {
        return start+(end-start)*rand()/(RAND_MAX + 1.0);
    }
    //-----------------------------------------------------------
        srand( unsigned(time(0)));
        for ( int i=0; i<DATA_MAGNITUDE; i++ )
        {
            vec2.PushBack( random(1, DATA_MAGNITUDE) );
        }
    
    	int size = 20>DATA_MAGNITUDE? 20 : DATA_MAGNITUDE;
        BubbleSort<int>( vec2 );
        for ( size_t i =0; i < 20; i++ )
        {
            cout<<vec2[i]<<" ";
        }
        cout<<endl;

    4. 算法分析



    comp move
    best n(n-1)/2 = o(n^2) 0
    worst n(n-1)/2 = o(n^2) n(n-1)/2 = o(n^2)
    avg n(n-1)/4 = o(n^2) n(n-1)/4 = o(n^2)

    best: Data = {1,2, 3, 4, 5, 6, 7}

    comp: n-1 + n-2 + .... + 1 = n(n-1)/2

    move : 0


  • 相关阅读:
    extgcd 扩展欧几里得算法模板
    51nod 1073约瑟夫环
    UVA 11806 Cheerleaders (容斥原理
    HDU 1863 畅通工程 (最小生成树
    并查集模板
    51NOD 1072 威佐夫游戏
    Java基于JAX-RD开发Restful接口
    tomcat的webapps下放置多个项目时会出现很多exception
    带滚动条的表格
    禁止apache显示目录索引的常见方法
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3187132.html
Copyright © 2020-2023  润新知