zoukankan      html  css  js  c++  java
  • C++11写算法之选择排序

    选择排序,顾名思义,指从数组后面将最小的值找出来,然后与最前面(指当前位置)值进行交换。

    时间复杂度:O(n^2)

    空间复杂度:O(1)

    此处应用了C++11的auto , lambda , static_assert 。

    show me the code !

    // #if __cplusplus < 201103L 
    // #error "must be compiled under c++11 support platform!!!"
    // #endif
    #include <iostream>
    #include <algorithm>
    #include <iterator>
    #include <cassert>
    using namespace std;
    
    void Swap(int& a, int& b)
    {
        int tmp = a;
        a = b;
        b = tmp;
    }
    void SelectSort(int varList[], const int size)
    {
        if (!varList || size <= 1)
        {
            return;
        }
        for (int i = 0; i < size; i++)
        {
            int swapPos = i;
            for (int j = i; j < size; j++)
            {
                if (varList[swapPos] > varList[j])
                {
                    swapPos = j;
                }
            }
            if (i != swapPos)
            {
                Swap(varList[i], varList[swapPos]);
            }
        }
    }
    
    void test()
    {
        //case counter
        int testCase = 0;
        //sort function object
        auto sortFunc = SelectSort;
        //show case result lambda function
        auto showFunc = [&testCase](const char* caseDescription){cout << "case[" << testCase++ << "]	(" << caseDescription << ") 		ok " << endl; };
    
        cout << "test begin : " << endl << endl;
    
        //case empty list
        {
            sortFunc(nullptr, 0);
            showFunc("case empty list");
        }
        //case wrong size
        {
            int nTestList[] = { 13, 52, 32, 15, 66, 2, 99, 202, 103, 2 };
            sortFunc(nTestList, 0);
            showFunc("case wrong size");
        }
        //case size == 1
        {
            int var = 13;
            int varList[] = { var };
            sortFunc(varList, 1);
            assert(var == varList[0]);
            showFunc("case size == 1");
        }
        //case normal sort
        {
            int varList[] = { 13, 52, 32, 15, 66, 2, 99, 202, 103, 2 };
            const int size = sizeof(varList) / sizeof(int);
            const int resultList[] = { 2, 2, 13, 15, 32, 52, 66, 99, 103, 202 };
            static_assert(sizeof(varList) == sizeof(resultList), "size of varList is not equal with resultList!!");
    
            sortFunc(varList, size);
            for (int i = 0; i < size; i++){ assert(varList[i] == resultList[i]); }
            showFunc("case normal sort");
        }
        //case sorted list
        {
            int varList[] = { 2, 2, 13, 15, 32, 52, 66, 99, 103, 202 };
            const int size = sizeof(varList) / sizeof(int);
            const int resultList[] = { 2, 2, 13, 15, 32, 52, 66, 99, 103, 202 };
            static_assert(sizeof(varList) == sizeof(resultList), "size of varList is not equal with resultList!!");
    
            sortFunc(varList, size);
            for (int i = 0; i < size; i++){ assert(varList[i] == resultList[i]); }
            showFunc("case sorted list");
        }
        cout << endl << "test done ! " << endl << endl;
    }
    int main(int argc, char* argv[])
    {
        test();
        return 0;
    }
  • 相关阅读:
    JZOJ 5870 地图
    20190921
    20190919
    SP703 SERVICE
    UVA323 Jury Compromise
    [note]一类位运算求最值问题
    [BZOJ3674]可持久化并查集
    [luogu3359]改造异或树
    [luogu4755]Beautiful Pair
    [BJWC2012]冻结
  • 原文地址:https://www.cnblogs.com/xylc/p/3681975.html
Copyright © 2011-2022 走看看