我正在尝试编写一个计数排序函数,但由于某种原因,它卡在了我的第一个 for 循环中。有人能告诉我我的逻辑有什么问题吗?我是 C++ 新手,所以请解释任何答案,以便我学习。提前致谢!
maxInt
编辑:只有当我输入小于 130,000时,我才会遇到问题(弹出窗口说“CountSort.exe 已停止工作”) 。如果我输入任何高于它的数字,它就会很好。我要排序的数字列表来自我阅读的外部 .txt 文件。这些数字是:1 4 6 2 34 65 2 3 64 2 12 97 56 45 3 43 23 99 2
struct CalcMaxInt
{
int maxInt;
CalcMaxInt () : maxInt(0) {}
void operator () (int i) { if (i > maxInt) maxInt = i; }
};
void countSort(vector<int> &numbers)
{
CalcMaxInt cmi = std::for_each(numbers.begin(), numbers.end(), CalcMaxInt());
int maxInt = cmi.maxInt + 1;
vector <int> temp1(maxInt);
vector <int> temp2(maxInt);
int min = 0;
for (int i = 0; i < numbers.size(); i++)
{
temp2[numbers[i]] = temp2[numbers[i]] + 1;
}
for (int i = 1; i <= maxInt; i++)
{
temp2[i] = temp2[i] + temp2[i - 1];
}
for (int i = numbers.size() - 1; i >= 0; i--)
{
temp1[temp2[numbers[i]] - 1] = numbers[i];
temp2[numbers[i]] = temp2[numbers[i]] -1;
}
for (int i =0;i<numbers.size();i++)
{
numbers[i]=temp1[i];
}
return;
}