单链表上的简单插入排序
simple insertion sort on a singly linked list c++
现在,我不担心效率,我只是在学习。我想知道是否有人可以帮助我学习一个简单的插入排序单链表。这是我的家庭作业,所以我想理解它。下面是代码:
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 );
}
相关文章:
- 这是插入排序的正确实现吗?
- 使用列表 STL 递归进行插入排序
- 列表 iter 不取消引用 使用列表进行插入排序
- 如何使插入排序更快?
- 插入排序的最小交换
- 双链表C++上的插入排序
- 如何在插入排序中使用 replace() 使语句变得不必要
- C++插入排序错误功能不起作用
- 如何在不通过插入排序更改原始矢量的情况下对 2D 矢量进行排序
- 插入排序打印错误的输出
- 从矢量末尾开始的插入排序
- 插入排序:我做错了什么?
- 插入排序的向量<unique_ptr<对时避免堆分配<>>>
- 获取有趣的输出以进行插入排序
- 插入排序算法在放入函数时的行为不同
- 插入排序的Valgrind Invalid读取尺寸8的尺寸
- 插入排序与插入/擦除?(所以我需要对一个向量进行排序,而不是手工做事,而是使用插入和擦除
- 堆排序和插入排序
- 简单插入排序中的分段错误
- 单链表上的简单插入排序