计数排序

来源:互联网 发布:vb教程 编辑:程序博客网 时间:2024/04/29 02:22

计数排序虽然时间复杂度为线性,但是该排序有很多使用限制,请自行百度

#include<iostream>#include<map>#include<vector>#include<cstring>#include<algorithm>using namespace std;class solution{public:solution(vector<int> &vec):   //构造函数,传入一个待排序数组    base(vec),    n(vec.size()){}        void count_sort();int  max_num();private:vector<int> &base;  //以引用的形式声明base的目的是为了不创建一个副本,直接在原数组上排序int n;              //元素个数};int solution::max_num(){    //求出数组的最大值int maxp=base[0];for(auto &e:base)    maxp=max(maxp,e);return maxp;}void solution::count_sort(){    const int k=max_num();    map<int,int> cnt;    vector<int> ret(n);    for(auto e:base) //记录相同元素的个数++cnt[e];    for(int i=1;i<=k;++i)cnt[i]+=cnt[i-1]; //cnt[i]代表i这个值的排位,i有可能不是数组的元素    for(int i=n-1;i>=0;--i)        ret[--cnt[base[i]]]=base[i]; //上一个循环的逆操作    base=ret;}


0 0