【发布时间】:2021-11-13 16:21:47
【问题描述】:
为什么这种计数排序不起作用?
#include <bits/stdc++.h>
using namespace std;
void countSort(vector<int>& input)
{
int max = *max_element(input.begin(), input.end());
vector<int> counter(max + 1);
vector<int> output;
for(int i = 0; i < max + 1; ++i)
{
counter[i] = 0;
}
for(int i = 0; i < input.size(); ++i)
{
counter[input[i]]++;
}
for(int i = 0; i < max + 1; ++i)
{
while(counter[i] > 0)
{
output.push_back(counter[input[i]]);
counter[i]--;
}
}
}
int main()
{
vector<int> array = {9, 8, 9, 1, 5, 7, 1, 2};
countSort(array);
}
当我运行此代码时,它只会向我发送一条错误消息,
进程以退出代码 1073741819 (0xC0000005) 结束
但我不明白错误在哪里。
【问题讨论】:
-
在你的最后一个 for 循环中,
input[i]似乎假设input至少有max+1元素。但事实并非如此。错字? -
@DrewDormann 在最后一个 for 循环中我只是通过了具有 max+1 个元素的计数器数组。怎么了?
-
如果您使用
g++或clang++在编译时添加参数-g -fsanitize=address,undefined。运行程序时你会得到something like this。真的很有帮助 -
不相关:不需要将
counter中的所有元素设置为0的循环。 -
错误信息是什么?
标签: c++ algorithm function loops sorting