У меня есть эти два структур, которые строят в связный список:Bubble сортировать связанный список
struct Element {
int value;
struct Element *next;
};
struct List {
struct Element *first;
};
Теперь я хочу, чтобы отсортировать список, связанный с пузырьковой сортировки. Я реализовал метод sortList, который сравнивает значение текущего элемента со значением следующего элемента. Если значение следующего элемента больше текущего, оно должно быть заменено. Но в данный момент это работает неправильно.
void sortList(List *list) {
Element *current = malloc(sizeof(Element));
current = list->first;
Element *nextElement = malloc(sizeof(Element));
nextElement = current->next;
Element *tmp = malloc(sizeof(Element));
tmp = NULL;
int changed = 1;
while (changed) {
changed = 0;
for (current; (current != NULL) && (nextElement != NULL);) {
if (current->value > nextElement->value) {
tmp = current->next;
current->next = nextElement->next;
nextElement->next = tmp;
changed = 1;
}
current = current->next;
nextElement = nextElement->next;
}
}
}
Что именно не работает? Основной подход кажется действительным; однако я предлагаю переместить операцию свопинга в отдельную функцию. – Codor
Список не отсортирован правильно. Вход: 1 4 3 2 6 Выход: 1 4 2 6 3 – torhoehn
Является ли реализация способной сортировать список с двумя элементами в неправильном порядке? – Codor