Sortierung verkettete Liste C++ mit Zeigern
Ich zu kämpfen haben, für Stunden lang am Ende mit diesem problem. Mein Ziel ist, Sortieren Sie eine verlinkte Liste nur Zeiger (ich kann nicht verknüpfte Liste in vec oder ein array und dann Sortieren). Ich bin angesichts der Zeiger auf dem head-Knoten der Liste. Die einzigen Methoden, die ich aufrufen kann, auf die Zeiger sind Kopf->next (Nächster Knoten) und head->Schlüssel (Wert von int gespeichert in Knoten, verwendet, um Vergleiche). Ich habe mit meinem whiteboard übermäßig und haben versucht, fast alles, was ich mir denken kann.
Node* sort_list(Node* head)
{
Node* tempNode = NULL;
Node* tempHead = head;
Node* tempNext = head->next;
while(tempNext!=NULL) {
if(tempHead->key > tempNext->key) {
tempNode = tempHead;
tempHead = tempNext;
tempNode->next = tempNode->next->next;
tempHead->next = tempNode;
tempNext = tempHead->next;
print_list(tempHead);
}
else {
tempHead = tempHead->next;
tempNext = tempNext->next;
}
}
return head;
}
- Poste den code, den Sie versuchen zu beheben. Wir sind nicht dagegen, Leser - ohne zu sehen, was Sie versucht haben, es gibt keinen Weg, um zu helfen.
- Was haben Sie versucht? Sind Sie auf der Suche für jemanden zu schreiben, den code für Sie?
- code Sorry, ich habe vergessen zu einfügen mein code, wenn ich mein post. Ich habe versucht, eine Menge Dinge, die im Laufe der letzten 5 Stunden. Wenn Sie Kritik an meinem code, das wäre sehr gut, aber die Allgemeinen Ideen sind auch hilfreich. Die Methode print_list nimmt in einem Knoten und druckt den Knoten aus, der an das Ende der Liste.
- Bitte fügen Sie den code hinzu, um die Frage, nicht als link zu einer externen Website in einem Kommentar.
- Sie scheinen nicht zu tun, jede Sortierung in der code.
- Sie haben eine Besondere Sortier-Algorithmus in den Sinn?
- Etwas ähnliches wie insertion sort, denke ich
- Der code, den Sie geschrieben sieht eher aus wie ein Versuch, einen bubble-sort, und es verliert der Knoten. Sollten Sie angepackt haben, das einfachere problem zu tauschen zwei benachbarte Elemente zuerst.
- Merge-sort ist einfach zu tun, einfach verknüpfte Listen, und kann schneller sein als das einfügen oder bubble-Sorten.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Da es eine einfach verknüpfte Liste, die wir tun können: (Pseudo-code)
code
in deinem link nicht ausgeführt, die die äußere while-Schleife, denn Sie haben sortiert, set zufalse
. Es geht direkt an das Ende des Codes.Fühle mich nicht schlecht, das ist viel schwieriger, als es klingt. Wenn dies in einem array wäre es deutlich einfacher. Wenn die Liste waren doppelt verkettete wäre es einfacher. Werfen Sie einen Blick auf diesen code, setzt eine insertion sort
Verwenden eine rekursive Ansatz ist die einfachste Möglichkeit, den Umgang mit vernetzten Strukturen:
Pseudocode:
also die sagen wir mal du hast 5 4 3 2 1
1) 5 4 3 1 2
2) 5 4 1 3 2
3) 5 4 1 2 3
4) 5 1 4 2 3
5) 5 1 2 4 3
...
n) 1 2 3 4 5
void
geben. Daher ist es nichts zurück, da es nur swaps Werte.Übernehmen die Knoten wie dieser:
Verwendung der insertion-sort-Algorithmus zum Sortieren der Liste:
Hier ist meine Merge-sort Durchführung mit O(N*logN) Zeit, die Komplexität und die ständigen zusätzlichen Raum. Verwendet C++11
Ich weiß, das ist spät, aber ich Suche es aber nicht bekommen, damit ich meine eigenen. vielleicht hilft es jemand.
Ich bin mit bubble-sort (Art-sort-Algorithmus) Sortieren von Daten in eine einfach verkettete Liste. Es ist nur der Austausch der Daten innerhalb eines Knotens.