单链表上的简单插入排序

simple insertion sort on a singly linked list c++

本文关键字:简单 插入排序 链表 单链表      更新时间:2023-10-16

现在,我不担心效率,我只是在学习。我想知道是否有人可以帮助我学习一个简单的插入排序单链表。这是我的家庭作业,所以我想理解它。下面是代码:

char c[13];
    r >> c;
    r >> NumberOfInts;
    Node *node = new Node;
    head = node; //start of linked list
    for(int i = 0; i < NumberOfInts; i++) //this reads from the file and works
    {
        r >> node->data;
        cout << node->data << endl;
        node ->next = new Node; //creates a new node
        node = node->next;
        if(_sortRead) //true
        {
            for(int k = 0; k < i; k++)
            {
                         //insertion sort
            }
        }
    }
到目前为止,我已经将

读取到istream中,因此我需要在读取时对其进行排序。顺便说一下,Node是一个结构体。有人能帮帮我吗?

看起来您在列表末尾添加了一个额外的节点。我怀疑最后一个节点中会出现未初始化的数据。

当前您只是将每个新节点添加到列表的末尾。

不应该将每个节点添加到列表的末尾,而应该从前面遍历整个列表,并找到正确的排序位置。然后将节点插入到该排序位置,而不是在末尾(我相信这是您试图在//insertion sort循环中实现的逻辑。

尝试基于STL构建一个有效的。如果您有一个有序列表,您可以通过lower_bound:

找到合适的位置。
template<class T> std::list<T>::iterator insert( std::list<T> &my_list, const T &value )
{
  return my_list.insert( std::lower_bound( my_list.begin(), my_list.begin(), value ), value );
}