对负值使用计数排序
Using Counting Sort on Negative values?
本文关键字:排序 更新时间:2023-10-16
>我有以下代码,但这仅适用于无符号的整数,我的目标是编写一个适用于所有整数的代码......
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
;其余的应该很容易。
thnks Anatolyg 我的新代码是:
void Counting_Sort(vector <int>& a, vector <int>& b)
{
int k=*max_element(a.begin(), a.end());
int m=*min_element(a.begin(), a.end());
int n=k-m+1;
vector<int>v(n);
for(int i=0; i<a.size(); i++)
v[a[i]-m]++;
for(int i=1; i<v.size(); i++)
v[i]=v[i]+v[i-1];
for(int i=a.size()-1;i>=0; i--)
{
b[v[a[i]-m]-1] = a[i];
v[a[i]-m]--;
}
}
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 显示错误输出的简单数组排序程序
- 为什么我的排序算法会更改数组值
- 试图在c++中对数字列表进行排序
- 如何在C++中对数组进行冒泡排序