C - Обмен узлами в связанном списке с алгоритмом сортировки

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

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

Мне нужно отсортировать список по алфавиту. Пожалуйста, имейте в виду, что я не могу реализовать сортировку или алгоритмы обмена в функциях (То есть я не могу создать функцию "swapNodes", и они реализуют ее в коде.

Мне удалось поменять местами два узла, следуя этой логике:

firstNode = auxiliar->next;
auxiliar-> next = firstNode->next;
firstNode->next = auxiliar;

Это работает, чтобы полностью заменить 2 узла.

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

Я проверил все сообщения об обмене пузырьками и узлом, но я просто могу заставить его работать.

Мой профессор пытался помочь мне, внедряя мой код обмена узлами следующим образом (обратите внимание, что в качестве примера следующий код должен сортироваться по возрасту):

while (flag == 1) {
 auxiliar = firstNode;
 flag = 0;

 if (auxiliar->edad > auxiliarSiguiente->edad) {

 firstNode = auxiliar->next;
 auxiliar-> next = firstNode->next;
 firstNode->next = auxiliar;
 flag = 1;

 }

 auxiliar3 = firstNode;

 while (auxiliar->next != NULL ) {

 if (auxiliar->age > auxiliarNext->age) {

 auxiliar2 = auxiliar->next;
 auxiliar->next = auxiliar2->next;
 auxiliar2->next = auxiliar;
 auxiliar3->next = auxiliar2;

 } else {
 auxiliar = auxiliar->next;
 }

 auxiliar3 = auxiliar3->next;

 }

 }

И опять же, этот код работает отлично, когда есть 2 узла. В случае, если их больше, они не сортируются корректно. Более того, я не совсем уверен, какой алгоритм сортировки использовал мой профессор.

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

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

Надеюсь, вы, ребята, можете мне помочь!

1 ответ

Ваш исходный код подкачки не изменяет next указатель узла, который указует на узел auxiliar указал перед свопом (который будет, если auxiliar не первый узел в списке).

licensed under cc by-sa 3.0 with attribution.