c – 使用计数按负值排序?

前端之家收集整理的这篇文章主要介绍了c – 使用计数按负值排序?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下代码,但这仅适用于无符号整数,我的目标是编写一个适用于所有整数的代码
void CountingSort(vector<int> & a,vector<int> & b)
{
    int k=*max_element(a.begin(),a.end());
    k++;

    vector <int> c(k);

    for (int i=0;i<a.size();i++)
        c[a[i]]++;
    for (int i=1;i<k;i++)
        c[i]=c[i]+c[i-1];
    for (int i=0;i<a.size();i++)
    {
        b[c[a[i]]-1]=a[i];
        c[a[i]]--;
    }
}

如何将其更改为适用于所有整数类型?

解决方法

首先计算最小值和最大值:
int k_min=*max_element(a.begin(),a.end());
int k_max=*min_element(a.begin(),a.end());
int k = k_max - k_min + 1;

对以下代码应用一些更改,将[i]替换为[i] – k_min;其余的应该很容易.

猜你在找的C&C++相关文章