Ich habe zwei Felder nämlich ID und Name. Nach dem Einfügen eines Knotens in eine verknüpfte Liste möchte ich ihn in absteigender Reihenfolge nach ID sortieren. Angenommen, es ist möglich, dass verschiedene Personen dieselbe ID haben können. Für das BeispielSortieren mit verknüpften Liste
1001 CHARICE -> 1001 JUSTIN -> 1001 ANNA -> 1000 CHYNA -> 888 MIKEY -> NULL
Die endgültige Liste soll wie folgt aussehen:
1001 ANNA -> 1001 CHARICE -> 1001 JUSTINE -> 1000 CHYNA -> 888 MIKEY -> NULL
ich die Namen mit der gleichen ID in aufsteigender Reihenfolge sortieren, während die IDs in absteigender Reihenfolge sortiert werden. Hier ist mein Code:
NODE* insert_std(NODE *head, NODE* std){
NODE *prev, *cur;
if(head==NULL) return std;
cur = head;
while (cur != NULL && std->ID < cur->ID){
prev = cur;
cur = cur->next;
}
if(std->ID == cur->ID){
while (cur != NULL && strcmp(std->name, cur->name)>=0){
prev = cur;
cur = cur->next;
}
}
if (head==cur){
if(std->ID >= head->ID) {
std->next = head;
head = std;
}
} else {
std->next = cur;
prev->next = std;
}
return head;
}
Aber ist nicht sortiert, wie ich es will. Was mache ich falsch?
Strings 'strcmp' (oder POSIX' strcasecmp') verwenden zu vergleichen. – pmg
Dieser wird nützlich sein: http://en.wikipedia.org/wiki/Sentinel_node – ruslik
Finden Sie meine Lösung für dieses Problem mit Quick-Sort-Algo bei –
user1596193