我试图通过将填充有随机值的用户设置长度列表传递给按升序对元素进行排序的函数来对数字列表进行排序。
我在使用数组之前已经解决过这个问题,没有任何问题。由于某种原因,我的代码无法工作,如果你们能帮助我找出它无法工作的原因,我将不胜感激。它将对数字进行排序,但最后一个数字将不排序。
这是函数:
void sort(std::list<int>& numbers)
{
list<int>::iterator it;
list<int>::iterator it2;
for (it = numbers.begin(); it != numbers.end(); ++it)
{
for (it2 = ++numbers.begin(); it2 != numbers.end(); ++it2)
{
if (*it > *it2)
{
int temp = *it;
*it = *it2;
*it2 = temp;
}
}
}
}
最佳答案
你的算法不起作用,因为第二个循环总是一次又一次地遍历(几乎)整个列表。它应该做的,只是遍历剩余部分。 IE。第二个周期应该是:
for (it2 = std::next(it1); it2 != numbers.end(); ++it2)
此外,由于第二个循环从“下一个”元素开始,因此第一个循环不应直到最后一个元素,而是直到倒数第二个元素。 IE。像这样的东西:
for (it = numbers.begin(); it != std::prev(numbers.end()); ++it)
但是,由于 std::prev()
仅为双向迭代器定义,而 std::list
不提供双向迭代器,因此将其重写为更容易:
for (it = numbers.begin(); std::next(it) != numbers.end(); ++it)
关于c++ - 尝试对 C++ 中的数字列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60314976/