C++ 单链表上的合并排序C++;
我正在寻找一些简单的方法,我可以学习和理解这些合并排序。我在网上查过,发现合并排序对单链表很有用,但我不知道怎么做。这是我找到的网站: 和 我不知道该给你什么代码。我基本上只是在我的头文件中有这个,我是新来的,所以我是非常基本的。提前感谢您的帮助:)C++ 单链表上的合并排序C++;,c++,mergesort,singly-linked-list,C++,Mergesort,Singly Linked List,我正在寻找一些简单的方法,我可以学习和理解这些合并排序。我在网上查过,发现合并排序对单链表很有用,但我不知道怎么做。这是我找到的网站: 和 我不知道该给你什么代码。我基本上只是在我的头文件中有这个,我是新来的,所以我是非常基本的。提前感谢您的帮助:) 如果你看看维基百科上的这段话 从概念上讲,合并排序的作用是 跟随 如果列表的长度为0或1,则该列表已排序。否则: 将未排序的列表分成两个子列表,大小约为一半 通过重新应用合并排序对每个子列表进行递归排序 将两个子列表合并回一个排序列表 这非常简洁
如果你看看维基百科上的这段话 从概念上讲,合并排序的作用是 跟随
Split()
和Merge()
。拆分可以在节点上实现
// Split: removes half of the list and returns a pointer to it
Node* Node::Split()
{
}
类似地,合并可以实现为
// Merge: insert elements from source in order
Node::Merge(Node* source)
{
}
作为一个整体,1,2,3,4描述了执行实际排序所需的操作。通过使用列表操作合并和拆分,在排序函数中按顺序执行这些步骤
这只是一种方式:代码>合并< /COD>和 SPLIG/<代码>,你如何实现它们将取决于你的风格、需求、C++知识和其他各种因素。(我相信你会在答案中看到其他一些解决方案)。您可能还需要一个Node::Append(Node*val)
或类似的基本运算符。看起来您不需要Node::Remove(Node*val)
,但实现这一点可能不会有什么坏处
// Merge: insert elements from source in order
Node::Merge(Node* source)
{
}