插入排序问题

时间:2014-02-06 19:47:12

标签: c++

我正在为我的介绍性C ++类进行插入排序,它似乎正在工作,但我在排序列表中不断重复。

主要

Storage s;
for (int i = 0; i < 20000; ++i)
{
    cout << "adding " << iss[i] << " to sorted list" << endl;
    s.Add(iss[i]);
}

并在Storage.cpp中

    void Storage::Add(int num)
{
    it = mylist.begin();
    if (mylist.empty())
    {
        Node tem(num);
        mylist.push_front(tem);
    }
    else 
    {
        while (it != mylist.end())
        {
            if (num < (*it).GetNumber())
            {
                Node temp(num);
                mylist.insert(it, temp);
            }
            it++;
            if (it == mylist.end())
            {
                Node te(num);
                mylist.push_back(te);
            }
        }
    }
    it = mylist.begin();
    while (it != mylist.end())
    {
        cout << (*it).GetNumber() << ',';
        it++;
    }
    cout << endl << mylist.size() <<endl;
}

Node只存储要添加到列表中的数字以及在Node内计算的时间。

我无法弄清楚为什么我会重复,谢谢你的帮助。

3 个答案:

答案 0 :(得分:1)

在while循环的第二个if条件中,总是在列表末尾添加一个导致重复的新节点。

答案 1 :(得分:1)

看看你的while循环。

    while (it != mylist.end())  // Here
    {
        if (num < (*it).GetNumber()) // Here
        {
            Node temp(num);
            mylist.insert(it, temp); // and here
        }
        it++;
        if (it == mylist.end())
        {
            Node te(num);
            mylist.push_back(te); // And here
        }
你知道休息了吗?添加后继续循环,并在最后添加。

答案 2 :(得分:0)

我认为问题出现在这个循环中

    while (it != mylist.end())
    {
        if (num < (*it).GetNumber())
        {
            Node temp(num);
            mylist.insert(it, temp);
        }
        it++;
        if (it == mylist.end())
        {
            Node te(num);
            mylist.push_back(te);
        }
    }

如果列表中有一个元素,那么在它之后++迭代器将等于end(),你将添加一个新元素。之后,当前迭代器结束无效。 我会用以下方式重写它

    while ( it != mylist.end() && !( num < (*it).GetNumber() ) ) it++;
    Node temp( num );
    if (it == mylist.end()) mylist.push_back(temp);
    else mylist.insert(it, temp);