Программа Python для рекурсивной сортировки выбора для односвязного списка — замена ссылок узлов

Опубликовано: 20 Сентября, 2022

Дан односвязный список, содержащий 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) основан на обсуждаемом здесь подходе, но он был соответствующим образом изменен для реализации этого поста.

Выход:

Linked list before sorting:
10 12 8 4 6
Linked list after sorting:
4 6 8 10 12

Временная сложность: O(n 2 )

Вспомогательное пространство: O(n)

Пожалуйста, обратитесь к полной статье о рекурсивной сортировке для односвязного списка | Обмен ссылками узлов для более подробной информации!

РЕКОМЕНДУЕМЫЕ СТАТЬИ