2013-10-24 1 views
0

Im пытается использовать метод сортировки вставки для сортировки узлов из LinkedList. Я скорректировал код столько раз, но я не могу, похоже, получить его, продолжать получать разные типы результатов, которые не сортируются.Вставка Сортировка для сортировки узлов в LinkedList

Heres код:

Node* sort_list(Node* head) 
{ 
    Node* node_ptr = NULL; 
    for(Node* i = head->next; i->next != NULL; i = i->next){ 
      if (i->key < head->key) { 
       node_ptr = i; 
       head = head->next; 
    } 
    } 
    return node_ptr; 
} 
+0

Поиск похожих вопросов, подобных этому _ [здесь] (http://stackoverflow.com/questions/16426104/insertion-sort-linked-list-c) _, чтобы помочь вам понять. – miqid

+0

Fwiw. Это также не делает сортировку вставки (или действительно любую другую описываемую сортировку). По его определению, вставка-сортировка представляет собой сложность O (NlogN) именно потому, что в нижнем сегменте используется двоичный поиск для определения места следующего элемента, который должен быть вставлен в уже отсортированную подпоследовательность, задача не слишком простая со связанными списки, но тривиально с контейнерами с произвольным доступом. – WhozCraig

ответ

0

Это проблема домашних заданий, так вместо того, чтобы прямо писать код, я первым указать, где вы пошло не так.

В алгоритме сортировки, подобном вставке, очевидно, что требуется некоторая замена, которая должна выполняться между неуместными элементами (которые необходимо вставить). Поэтому начните с размышления о том, как вы можете поменять два элемента массива. Обратите особое внимание на случаи, когда один из них является голова или один хвост.

В вашем реализованном коде нет следов указателей, поэтому здесь вы ошибаетесь.

Далее вы должны подумать о случаях, когда нам нужно сортировать. В этом случае это довольно просто. Если текущий элемент и следующий находятся в отсортированном порядке (при условии возрастания, текущий < следующий). Тогда ничего не нужно делать, а просто сделать следующий поток.

Тогда вы, очевидно, можете заключить, что нарушение этого случая происходит, когда вам нужно поменять элементы. После обмена (с должным вниманием к тому, где указатели были и будут после сортировки), повторите процесс, пока не нажмете нулевую стену.

P.S: Это возможный дубликат другого вопроса.

 Смежные вопросы

  • Нет связанных вопросов^_^