📌  相关文章
📜  用于单链表递归选择排序的 Javascript 程序 - 交换节点链接

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

用于单链表递归选择排序的 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)

请参阅关于单链表递归选择排序的完整文章 |交换节点链接以获取更多详细信息!