Ich schreibe ein Programm, das erfordert, dass ich einen Heap verwenden, und alles läuft gut neben meiner Sortiermethoden, offensichtlich sehr wichtig! Ich bin mir nicht sicher, was mit meiner Logik nicht stimmt oder ob mir etwas Dummes fehlt. Aber ein frischer Blick darauf wäre schön.C++ sieben runter Heap
Die Funktion wird mein Vektor übergeben, der natürlich der Heap ist, der Speicherort der Wurzel und dann entweder die STL weniger oder größer als ein Prädikat.
template<class T,class P>
void upheap(vector<T>& v, int start, P func) {
T x = v[start];
while (start > 1 && func(x, v[start/2])) {
v[start] = v[start/2]; start /= 2;
}
v[start] = x;
}
Irgendeine Idee, was ist falsch?
Sie sagen, Sie übergeben die Wurzel des Heaps? Sollten Sie nicht den Index des Elements übergeben, das aufgetischt werden muss? –
Entschuldigung ja das ist was ich meine es ist der Index Wert. – rajh2504
Vielleicht solltest du die Invarianten, Vorbedingungen und Nachbedingungen schreiben und dann wirst du vielleicht den Ärger sehen. Zum Beispiel, ist die Bedingung 'HEAP (i = 0 .. start-1)' wahr bei der Eingabe? Und dann ist das Ziel, dass die Bedingung "HEAP (i = 0..start)" beim Verlassen wahr sein sollte? –