我正在尝试使用从最大值到最小值的插入排序对双向链表进行排序。但是,插入排序不起作用,如果我使用它,程序崩溃。对双向链表使用插入排序对我来说非常困惑,所以我感谢任何帮助。
template <typename T>
class Node
{
private:
T item;
shared_ptr<Node<T>> next;
shared_ptr<Node<T>> prev;
public:
T getItem() { return item; }
shared_ptr<Node<T>>& getNext() { return next; }
shared_ptr<Node<T>>& getPrev() { return prev; }
}
这是导致崩溃的插入排序。我可以不正确地交换节点吗?
void insertionSort()
{
shared_ptr<Node<T>> curPtr = top;
shared_ptr<Node<T>> temp;
shared_ptr<Node<T>> rover;
while (curPtr != nullptr)
{
temp = curPtr;
rover = curPtr->getPrev();
while (rover != nullptr && temp->getItem() > rover->getItem())
{
rover = rover->getNext()->getNext();
rover = rover->getPrev();
}
rover->getNext()->getNext() = temp;
curPtr = curPtr->getNext();
}
}