我有以下代码,但这仅适用于无符号整数,我的目标是编写一个适用于所有整数的代码…
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;其余的应该很容易.