gpt4 book ai didi

c++ - 对负值使用计数排序?

转载 作者:可可西里 更新时间:2023-11-01 18:36:09 24 4
gpt4 key购买 nike

我有以下代码,但这仅适用于无符号整数,我的目标是编写适用于所有整数的代码...

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;

对以下代码进行一些更改,将 a[i] 替换为 a[i] - k_min;剩下的应该很容易。

关于c++ - 对负值使用计数排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11001797/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com