Я создал связанный список из 5 узлов типа:пузыря сортировки связанного списка в C
typedef struct node
{
int i;
struct node* link;
}node;
node* head = NULL;
При распечатке, это дает:
4 3 2 1 0
Указатель головки устанавливается в точку в 4. Затем я написал функцию для создания пузырьков связанного списка следующим образом:
void sort(void)
{
node* cur = head;
node* next = cur->link;
node* prev = NULL;
while(cur->i > next->i)
{
printf("cur is greater than next\n");
while(prev != head)
{
cur->link = next->link;
next->link = cur;
head = next;
next = cur->link;
prev = head;
}
while(next != NULL)
{
prev->link = next;
cur->link = next->link;
next->link = cur;
prev = next;
next = cur->link;
}
printf("second while loop exited\n");
for (node* ptr = head; ptr != NULL; ptr = ptr->link)
{
printf("%d", ptr->i);
}
cur = head;
next = cur->link;
}
}
Существуют различные заявления printf для che ck, что программа работает. Что я нахожу в том, что после первого прогона, 4 успешно ое следующим образом:
3 2 1 0 4
Однако после повторной установки указателя текущ 3 и рядом с 2, следующим прогоном обеспечивает следующее:
2 1 0 4 3
в конечном счете, мы закончим с
0 4 3 2 1
Итак, как можно видеть "3", "2" и "1" в настоящее время ыми слишком далеко. Я попробовал различные условия вместо третьего цикла, чтобы исправить это, но в большинстве случаев это приводит к сегрегациям. Конечно, другое дело в том, что моя логика может быть совершенно неправильной, и может быть лучший способ реализовать это. Не могли бы вы просто сменить содержимое узлов, а не самих указателей? Любая помощь приветствуется. Заранее спасибо
Выпишите на бумаге именно то, что вы хотите сделать каждый шаг, затем пройдите через него в отладчике и сравните. – sp2danny
Как работает ваш код для списка '0 4 3'? Внешний цикл, по-видимому, пропускает любую обработку при первом сравнении из-за того, что ноль не больше четырех, поэтому '(cur-> i> next-> i)' false ... – CiaPan