为啥我的计数排序算法根本不排序?
Posted
技术标签:
【中文标题】为啥我的计数排序算法根本不排序?【英文标题】:Why does my counting sort algorithm not sort at all?为什么我的计数排序算法根本不排序? 【发布时间】:2020-03-18 20:30:55 【问题描述】:#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
void SortCount(vector<int>& vec)
int max_el = *max_element(vec.begin(), vec.end());
vector<int> C(max_el+1, 0);
vector<int> B(vec.size(), 0);
for(int i = 0; i < vec.size(); i++)
C[vec[i]] = C[vec[i]] + 1;
for(int i = 1; i <= vec.size(); i++)
C[i] = C[i] + C[i - 1];
for(int i = 0; i < vec.size(); i++ )
B[C[vec[i]] - 1] = vec[i];
C[vec[i]] = C[vec[i]] - 1;
for(int i=0; i<vec.size(); i++)
vec[i] = B[i];
int main()
vector<int> vec 5,2,43,31,67,311;
SortCount(vec);
for (size_t i=0; i <vec.size(); i++)
cout<<vec[i]<<" ";
return 0;
我完全按照书上的规定做了,但由于某种原因,它只是按照放置它们的顺序打印出值。我在哪里搞砸了?
编辑:我添加了主函数
【问题讨论】:
您找到了max_el
,但从不在任何地方使用它。也许这是个问题?
我没有在您的代码中看到 anywhere 实际更改(甚至分配任何内容)给定 vec
参数的任何元素!您只是在更改(可能)本地副本中的内容。
***.com/q/1452721/430766
不是,这就是为什么它不是答案,而是评论。您似乎正在学习 C++,因此该链接可能对您很有价值。
某人发布该链接的目的是试图敦促您在未来伤害您之前打破这种不良做法。不,这不会导致问题。
【参考方案1】:
您对计数数组的迭代有错误的界限:
//for(int i = 1; i <= vec.size(); i++) <--wrong
for(int i = 1; i < C.size(); i++)
C[i] = C[i] + C[i - 1];
您还应该养成使用std::size_t
作为索引类型而不是int
的习惯。 int
既小又带符号,不适合索引。
【讨论】:
以上是关于为啥我的计数排序算法根本不排序?的主要内容,如果未能解决你的问题,请参考以下文章