我在排序方面遇到了问题。我有2个功能。第一个插入一个数字到一个排序列表,第二个插入一个未排序的列表,名为unsorted,创建一个新列表,并重复调用第一个,直到新列表是未排序输入的排序版本。然后返回排序列表。
我的理解是第一个新列表是一个空列表,它是一种“排序”,并逐个插入每个元素。但我的代码不知何故不起作用。第一个函数通过了测试,但第二个函数没有通过。这是我的代码:
void insertInOrder(list<int>& sorted, int number)
{
if (sorted.empty())
{sorted.push_back(number);
else
{
for(list<int>::iterator I = sorted.begin();I!= sorted.end();I++)
{
if (*I <=number)
{
sorted.insert((++I),number);// since I increases another time here
--I;//decrease once back
return;
}
else
{
sorted.insert(I,number);
return;
}
}
}
}
std::list<int> reorder(std::list<int>& unsorted)
{
std::list<int> ordered;
for (list<int>::iterator J = unsorted.begin(); J!=unsorted.end(); J++)
{
insertInOrder(ordered, *J);
}
return ordered;
}
答案 0 :(得分:0)
我认为你想要的是,如果要插入的值小于或等于当前节点,则不执行任何操作并继续循环,否则插入并返回。这当然可以写成:如果要插入的值大于列表中的当前节点,请在当前节点和退出循环之后插入它。
所以
if (number > *I)
{
sorted.insert(++I, number); // Insert after current node
break; // Exit loop
}