C++ 排序并插入C++;
我在分类方面有个问题。我有两个功能。第一个将数字插入已排序的列表,第二个接收名为未排序的未排序列表,创建一个新列表,并重复调用第一个列表,直到新列表是未排序输入的排序版本。然后返回排序后的列表 我的理解是,第一个新列表是一个空列表,有点“排序”,并将每个元素逐个插入其中。但我的代码不知怎的不起作用。第一个函数通过了测试,但第二个函数没有通过。这是我的密码:C++ 排序并插入C++;,c++,sorting,C++,Sorting,我在分类方面有个问题。我有两个功能。第一个将数字插入已排序的列表,第二个接收名为未排序的未排序列表,创建一个新列表,并重复调用第一个列表,直到新列表是未排序输入的排序版本。然后返回排序后的列表 我的理解是,第一个新列表是一个空列表,有点“排序”,并将每个元素逐个插入其中。但我的代码不知怎的不起作用。第一个函数通过了测试,但第二个函数没有通过。这是我的密码: void insertInOrder(list<int>& sorted, int number) { if (
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;
}
void insertinoder(列表和排序,整数)
{
if(sorted.empty())
{已排序。推回(数字);
其他的
{
for(list::iterator I=sorted.begin();I!=sorted.end();I++)
{
if(*I我认为您想要的是,如果要插入的值小于或等于当前节点,则不执行任何操作并继续循环,否则插入并返回。这当然可以写成:如果要插入的值大于列表中的当前节点,则将其插入到当前节点之后并退出循环
所以
您必须自己编写排序吗?您不能使用,例如?这是一个家庭作业,因此…您的插入排序只会在索引0或索引1处插入一个新项,因为无论比较结果如何,您都会在第一次循环迭代中插入它。查看insertinoder
中的循环,无论您总是从函数。所以循环甚至不会完成一次迭代。是的,你是对的!但是如果我没有返回,我会让它插入很多次。所以也许我需要使用另一个算法?我不知道为什么,但我的编译器说(I+1)是不匹配的(它会给我一个很长的错误消息)。那为什么呢?@user3275943抱歉,是我的错。我忘了std::list
使用的迭代器不是a,而是a,它没有该运算符。更新了我的代码。如果I在for循环中,并且每次循环后都会执行“++I”,我应该这样做吗?--I“在++I之后?我的意思是,额外的++I会影响I的值吗?THx@user3275943如果条件为真,则退出循环,因此无需执行类似操作
if (number > *I)
{
sorted.insert(++I, number); // Insert after current node
break; // Exit loop
}