カウントソート関数を作成しようとしていますが、何らかの理由で最初のforループ内でスタックしています。誰かが私のロジックの何が問題なのか教えてもらえますか?私はC++を初めて使用するので、学習できるように回答を説明してください。前もって感謝します!
maxInt
編集: 130,000未満を入力した場合にのみ、問題(「CountSort.exeが動作を停止しました」というウィンドウポップアップ)が発生します。それよりも大きい数値を入力すると、うまく機能します。並べ替えたい番号のリストは、私が読んだ外部の.txtファイルからのものです。番号は次のとおりです。1462 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;
}