📌  相关文章
📜  用于对按升序和降序交替排序的链表进行排序的 Javascript 程序

📅  最后修改于: 2022-05-13 01:56:08.557000             🧑  作者: Mango

用于对按升序和降序交替排序的链表进行排序的 Javascript 程序

给定一个链表。链接列表按升序和降序交替排列。有效地对列表进行排序。

例子:

Input List: 10 -> 40 -> 53 -> 30 -> 67 -> 12 -> 89 -> NULL
Output List: 10 -> 12 -> 30 -> 40 -> 53 -> 67 -> 89 -> NULL

Input List: 1 -> 4 -> 3 -> 2 -> 5 -> NULL
Output List: 1 -> 2 -> 3 -> 4 -> 5 -> NULL

简单的解决方案:

方法:基本思想是在链表上应用归并排序。
本文讨论了实现:链表的合并排序。

复杂性分析:

  • 时间复杂度:链表的归并排序需要 O(n log n) 时间。在归并排序树中,高度为 log n。对每个级别进行排序将花费 O(n) 时间。所以时间复杂度是O(n log n)。
  • 辅助空间: O(n log n),在归并排序树中,高度为 log n。存储每个级别将占用 O(n) 空间。所以空间复杂度是O(n log n)。

高效解决方案:
方法:

  1. 分开两个列表。
  2. 按降序反转一个
  3. 合并两个列表。

图表:

下面是上述算法的实现:

Javascript


输出:

Given Linked List is
10 40 53 30 67 12 89
Sorted Linked List is
10 12 30 40 53 67 89

复杂性分析:

  • 时间复杂度: O(n)。
    需要一次遍历来分离列表并将它们反转。排序列表的合并需要 O(n) 时间。
  • 辅助空间: O(1)。
    不需要额外的空间。

请参阅完整文章对按升序和降序交替排序的链表进行排序?更多细节!