Sortowanie listy dwukierunkowej
Ostatnio zmodyfikowano 2015-06-09 23:09
zolax Temat założony przez niniejszego użytkownika |
Sortowanie listy dwukierunkowej » 2015-06-09 14:33:54 Witam wszystkich mam problem z posortowaniem listy dwukierunkowej za pomocą sortowania bąbelkowego. Mój kod wygląda tak: struct node { int key; struct node * left; struct node * right; };
void sort( int count, struct node * t_node ) { struct node * tmp, * nextnode, * node1, * node2; node2 = t_node; do { while( node2->right ) { if( node2->key > node2->right->key ) { nextnode = node2->right; tmp = node2->left; if( tmp ) tmp->right = nextnode; if( nextnode->right ) nextnode->right->left = node2; node2->right = nextnode->right; node2->left = nextnode->left; nextnode->right = node2; nextnode->left = tmp; } node2 = node2->right; } count = count - 1; } while( count > 1 ); }
Problem polega na tym, że dla przykładowych danych przed sortowaniem mam Node value: 15 Node value: 3 Node value: 1 Node value: 10 A po sortowaniu: Node value: 15 Node value: 1 Node value: 10
Może ktoś pomóc? |
|
pekfos |
» 2015-06-09 19:40:13 Zdefiniuj sobie funkcję zamieniającą 2 elementy listy ze sobą i uwzględnij wszystkie przypadki. Cała reszta jest wtedy banalna. |
|
zolax Temat założony przez niniejszego użytkownika |
» 2015-06-09 23:01:12 Utworzyłem taką funkcję: void swapNodes( struct node * i, struct node * j ) { if( i->left ) i->left->right = j; if( j->left ) j->left->right = i; if( i->right ) i->right->left = j; if( j->right ) j->right->left = i; struct node * temp; temp = i->left; i->left = j->left; j->left = temp; temp = i->right; i->right = j->right; j->right = temp; } Jednak teraz zamienia mi tylko 2 element z 3. Co robię źle? |
|
pekfos |
» 2015-06-09 23:09:49 Twój sposób nie uwzględnia przypadku, gdy 2 węzły sąsiadują ze sobą. Nie aktualizujesz też wskaźnika na pierwszy element listy. |
|
« 1 » |