排序并插入C++

Sort and insert in C++

本文关键字:C++ 插入 排序      更新时间:2023-10-16

我在排序时遇到了问题。我有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;
}
我认为

你想要的是,如果要插入的值小于或等于当前节点,则什么都不做并继续循环,否则插入并返回。这当然可以写成:如果要插入的值大于列表中的当前节点,则将其插入当前节点之后并退出循环。

所以

if (number > *I)
{
    sorted.insert(++I, number);  // Insert after current node
    break;                         // Exit loop
}