用于单链表递归选择排序的 Javascript 程序 - 交换节点链接
给定一个包含n 个节点的单链表。问题是使用递归选择排序技术对列表进行排序。该方法应该涉及交换节点链接而不是交换节点数据。
例子:
Input: 10 -> 12 -> 8 -> 4 -> 6
Output: 4 -> 6 -> 8 -> 10 -> 12
在选择排序中,我们首先找到最小元素,将其与开始节点交换,并为剩余的列表递归。下面是链表这些步骤的递归实现。
recurSelectionSort(head)
if head->next == NULL
return head
Initialize min = head
Initialize beforeMin = NULL
Initialize ptr = head
while ptr->next != NULL
if min->data > ptr->next->data
min = ptr->next
beforeMin = ptr
ptr = ptr->next
if min != head
swapNodes(&head, head, min, beforeMin)
head->next = recurSelectionSort(head->next)
return head
swapNodes(head_ref, currX, currY, prevY)
head_ref = currY
prevY->next = currX
Initialize temp = currY->next
currY->next = currX->next
currX->next = temp
swapNodes(head_ref, currX, currY, prevY)基于此处讨论的方法,但已针对本文的实施进行了相应修改。
Javascript
输出:
Linked list before sorting:
10 12 8 4 6
Linked list after sorting:
4 6 8 10 12
时间复杂度: O(n 2 )
辅助空间: O(n)
请参阅关于单链表递归选择排序的完整文章 |交换节点链接以获取更多详细信息!