计数排序

#ifndef COUNT_SORT_H
#define COUNT_SORT_H

#include 
#include 
#include

/// 计数排序
/// 就是待排序的数要满足一定的范围的整数,而且计数排序需要比较多的辅助空间。
/// O(n)时间复杂度
template 
class sort_count
{
public:
    static void sort(std::vector &arr)
    {
        size_t n = arr.size();
        if (n < 2)
        {
            return;
        }

        auto mm = _min_max(arr);
        auto min = std::get<0>(mm);
        auto max = std::get<1>(mm);

        std::vector count(max-min+1, 0);
        for (auto k: arr)
        {
            count[k-min]++;
        }

        int k = 0;
        for (int i = 0; i <= max-min; i++)
        {
            for (int j = 0; j < count[i]; j++)
            {
                arr[k++] = i+min;
            }
        }
    }

private:
    static std::tuple _min_max(const std::vector &arr)
    {
        int min = arr[0];
        int max = arr[0];
        for(auto k:arr)
        {
            if(min>k)
            {
                min=k;
            }
            else if (max

 

你可能感兴趣的:(算法)