Почему эта пузырьковая сортировка с двойным связанным списком в C не сортируется?

Я пытаюсь отсортировать двусвязный список с помощью пузырьковой сортировки в C. Однако возвращаемый список — это тот же список, который я ввел. Пример [1,2,4,8,0,3] -> [1,2, 4,8,0,3]

void bublesort(slist_t *list){
    list_item_t *curr = NULL;
    curr = list->head;
    if(curr == NULL){
       printf("\nList is empty.");
    }
    while(curr->next != NULL && curr->value > curr->next->value){
       curr = swap(curr, curr->next, list);
    }
    while(curr->prev != NULL){
        if(curr->value < curr->prev->value){
            bublesort(list);
        }
    }

}

list_item_t *swap(list_item_t *item1, list_item_t *item2, slist_t *list){
    item1->next = item2->next;
    item2->next = item1;
    item2->prev = item1->prev;
    item1->prev = item2;
    if(item1 == list->head){
        list->head = item2;
    }
    if(item2 == list->tail){
        list->tail = item1;
    }
    return item2;
}

person WhyAyala    schedule 13.02.2014    source источник
comment
Укажите, что происходит и чего вы ожидаете?   -  person Digital_Reality    schedule 13.02.2014
comment
@Digital_Reality Ну, как указано в заголовке, пузырьковая сортировка должна сортировать, но не сортирует. Другими словами, когда я запускаю пузырьковую сортировку, я получаю тот же список, что и вставил. Я ожидаю, что пузырьковая сортировка... хорошо отсортирует.   -  person WhyAyala    schedule 13.02.2014
comment
Вам не нужно выделять память для instanceList, если вы не используете эту память. А также пишите комментарии к тому, что вы делаете.   -  person Rikayan Bandyopadhyay    schedule 13.02.2014
comment
Вам не нужно выделять любую память при пузырьковой сортировке существующего связанного списка. При каждом проходе последний узел удаляется и помещается в отдельный список, возглавляемый указателем, который изначально равен NULL. как только возникает условие отсутствия обмена, оставшийся список сортируется, и два могут быть объединены для формирования окончательного списка (это условие будет выполнено по умолчанию, когда в исходном списке останется один узел, если это еще не произошло) . См. этот ответ для более подробного объяснения.   -  person WhozCraig    schedule 13.02.2014