• 选择排序


    1. 问题描述

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

    2. 问题分析

    选择排序:

    它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。



    3. 算法实现

    template<typename T>
    void SelectSort( CVector<T> &vec )
    {
        int low;
        int n = vec.GetSize();
        for ( int i=0; i<n-1; i++ )
        {
            low = i;
            for ( int j=n-1; j>i; j-- )
            {
                low = vec[low] > vec[j]? j:low;
            }
    
            if( low != i )
            {
                Swap<T>( vec[i], vec[low] );
            }
           
        }
    }

    测试:

    #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;
        SelectSort<int>( vec2 );
        for ( size_t i =0; i < size; 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-1
    avg n(n-1)/2 = o(n^2) n-1
  • 相关阅读:
    qq客服不需要加好友
    mysql中表名为关键字的处理方法
    DIV+CSS最小高度(兼容IE6\IE7\FF)(转载)
    Js%26String添加加+trim()方法
    MS Sql 定期自动备份
    MySQL 中文显示乱码
    SQL Server 2005 中的Row_Number()函数
    Jquery中使用setInterval和setTimeout
    fieldset 居中
    script language="JavaScript" defer
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3187114.html
Copyright © 2020-2023  润新知