vector<int> vect;
vector<int> sorted;
vect.push_back(5);
vect.push_back(3);
vect.push_back(7);
vect.push_back(2);
vect.push_back(9);
vect.push_back(6);
//Print vector elements
for (int x=0; x<vect.size(); x++)
cout << vect[x] << endl;
int min = 99999, idx=0;
while (vect.size() > 0)
{
for (int x=0; x<vect.size(); x++)
{
if (vect[x] < min)
{
min = vect[x];
idx = x;
}
}
cout << "Min index: " << idx << endl;
sorted.push_back(vect[idx]);
vect.erase(vect.begin()+idx);
}
for (int x=0; x<sorted.size(); x++)
cout << sorted[x] << endl;
我想通过将排序的数字存储到vector<int> sorted
来对整数向量进行排序。但程序总是在遇到一些未知的程序错误后中途终止。
The only output I get is:
5
3
7
2
9
6
Min Index: 3
Min Index: 3
Min Index: 3
Min Index: 3
<Program Terminated At This Point>
我一直在努力工作几个小时,我不知道为什么我总是将索引3作为最小的数字。我在实施中做错了什么? 我一直在思考它几个小时,我的逻辑似乎是正确的?
答案 0 :(得分:0)
在你第一次传球时,它发现min是2。 然后它会删除2,即索引3。 然后它再次通过,除了小于2。 所以它仍然有索引3,并删除它。 这将继续,直到您不再有超过3项。 然后它失败了,因为矢量太小而不能擦除索引3。
在你的for循环之前将你的min重置回99999。
答案 1 :(得分:0)
正如Blastfurnace所指出的那样。我忘了重置Min。 这应该解决它。
int idx=0;
while (vect.size() > 0)
{
int min = 99999;
for (int x=0; x<vect.size(); x++)
{
if (vect[x] < min)
{
min = vect[x];
idx = x;
}
}
cout << "Min index: " << idx << endl;
sorted.push_back(vect[idx]);
vect.erase(vect.begin()+idx);
}