在C ++中排序和插入

时间:2014-03-03 03:21:12

标签: c++ sorting

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

1 个答案:

答案 0 :(得分:0)

我认为你想要的是,如果要插入的值小于或等于当前节点,则不执行任何操作并继续循环,否则插入并返回。这当然可以写成:如果要插入的值大于列表中的当前节点,请在当前节点和退出循环之后插入它。

所以

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