Привет всем Я стараюсь сортировать свой двойной связанный список в C, используя алгоритм сортировки пузырьков. Вот мой код:Bubble сортировать двойной связанный список
struct node {
unsigned char key;
unsigned char num;
struct node *left;
struct node *right;
};
Вот мой род несильно:
void sort(int count, struct node *t_node)
{
struct node *tmp,*nextnode, *node1, *node2;
for(node1 = t_node;node1->right != NULL ;node1 = node1->right) {
for(node2 = node1->right; node2->right != NULL; node2 = node2->right) {
if(node2->key > node2->right->key)
{
nextnode = node2->right;
tmp = node2->left;
node2->right = nextnode->right;
node2->left = nextnode->left;
nextnode->right = node2;
nextnode->left = tmp;
}
}
}
}
Он работает в 80%, так как, например, данные:
node1 key=3
node2 key=144
node3 key=49
node4 key=207
Результат после сортировки:
node1 key=3
node2 key=144
node4 key=207
Почему мой третий узел исчез? В чем проблема?
Что о 'tmp-> right' и' nextnode-> право-> left' ? – Eregrith
Как их назначить? – Zobo
Рассмотрим абстрагирование свопа на отдельную функцию. Удостоверьтесь, что кромки (замена и от начала или конца списка) работают. – Bathsheba