Zeitkomplexität und die C -Sprache höfen

Zeitkomplexität und die C -Sprache höfen
„Das Ziel dieses Artikels ist es, die zeitliche Komplexität für den Aufbau eines Haufens zu erstellen. Zeitkomplexität ist die relative Laufzeit eines Codes. Ein Haufen ist ein Baum, bei dem alle Kinder für jeden übergeordneten Knoten größer oder gleichwertig für den übergeordneten Knoten sind. Das ist ein Mindesthaufen (ich.e., minheap). Es gibt auch einen maximalen Haufen (max-heap), wobei alle Kinder jedes übergeordneten Knotens weniger als oder gleich dem übergeordneten Knoten sind. Für den Rest dieses Artikels wird nur Min-heap in Betracht gezogen.”

Der obige Mindesthaufen beschreibt einen Haufen, bei dem die Anzahl der Kinder pro Elternknoten mehr als zwei betragen kann. Ein binärer Haufen ist einer, bei dem die höchste Anzahl von Kindern pro Elternknoten zwei ist. Ein vollständiger binärer Haufen ist einer, bei dem jeder Knoten zwei Kinder hat, mit der Ausnahme, dass es auf der niedrigsten Ebene nur einen Blattknoten ohne Geschwister gibt. Mit dem Rest der niedrigsten Blattknoten gepaart und vom extrem linken Ende der letzten Zeile beginnt mit diesem einzelnen Blattknoten, der ein linker Knoten sein muss.

Häufe bedeutet, einen Haufen zu bauen (zu schaffen). Da ein Baum, bei dem jeder Knoten eine beliebige Anzahl von Kindern haben kann.

Ein Beispieldiagramm eines vollständigen binären Baums ist:

Jeder Blattknoten auf der niedrigsten Ebene, die kein Geschwister hat. Alle Knoten der letzten Zeile, einschließlich eines möglichen linken Knotens mit einem linken, werden bis zum linken Ende der letzten Zeile „gespült“.

Durch die Definition eines Haufens kann ein linke Geschwister kleiner, größer oder gleich dem rechten Geschwister sein. Die Bestellung beider Geschwister ist nicht angegeben.

Voller binärer Baum

Der obige Baum ist ein kompletter binärer Baum, aber es ist kein vollständiger binärer Baum. Es ist auch ein Mindesthaufen. Wenn es ein voller Binärbaum wäre, hätten alle Knoten des letzten, aber eines Levels jeweils zwei Kinder gehabt. Der obige Baum wird unten als vollständiger binärer Baum neu gezeichnet:

Ein Baum kann durch ein Array dargestellt werden. Der Baum wird von oben nach unten, links nach rechts, Zeile nach Zeile gelesen; dann in das Array platziert. Die folgende Tabelle zeigt das Array von Inhalten und Indizes für diesen Baum:

4 6 12 8 7 16 15 23 10 20 18 25 Null Null Null
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Die Zellwerte befinden sich in der ersten Tabellenzeile. Die null basierten Indizes befinden sich in der zweiten Tabellenzeile.

Beziehung zwischen einem übergeordneten Index und seinen Kinderindizes

Im Baum oder entsprechenden Array befindet sich das Stamm. Lassen Sie mich die Variable sein, um jeden Index zu halten. Die Kinder der Wurzel befinden sich in den Indizes 1 und 2, die 0 + 1 und 0 + 2 sind. Die Kinder des Knotens 1 befinden sich in den Indizes 3 und 4, die 1 + 2 und 1 + 3 sind. Die Kinder des Knotens 2 befinden sich bei Index 5 und 6, die 2 + 3 und 2 + 4 sind. Die Kinder des Knotens 3 befinden sich bei Index 7 und 8, die 3 + 4 und 3 + 5 sind. Die Kinder des Knotens 4 befinden sich bei Index 9 und 10, die 4 + 5 und 4 + 6 sind; usw.

Lassen Sie mich vorerst der übergeordnete Index sein. Die Kinder jedes Elternteils sind also bei Index I + I + 1 und bei I + I + 2, die sind:

2i +1 und 2i +2

Das Gegenteil sollte bekannt sein. Das heißt, bei einem Index für ein linkes Kind oder ein rechte Kind, was ist der übergeordnete Index? Für das linke Kind am Index 1 und das rechte Kind am Index 2 befindet sich der Elternteil am Index 0. Für das linke Kind am Index 3 und das rechte Kind bei Index 4 befindet sich das Elternteil in Index 1. Für das linke Kind bei Index 5 und das rechte Kind in Index 6 befindet sich der übergeordnete Elternteil bei Index 2. Für das linke Kind bei Index 7 und das rechte Kind bei Index 8 befindet sich der Elternteil in Index 3. Für das linke Kind bei Index 9 und das rechte Kind bei Index 10 befindet sich das übergeordnete Elternteil in Index 4.

Ich diesmal ist ein untergeordneter Index (kein übergeordneter Index). Daher befindet sich das Elternteil jedes linken Kindes an der Index I/2 der Ganzzahl-Abteilung, und das Elternteil des rechten Kindes, das mit dem Elternteil des linken Kindes (Geschwister) das gleiche ist, ist das Ganzzahl von (I-1). /2, ich.e.:

i/2 und (i-1)/2

wo die Abteilung ganzzahlige Abteilung ist.

Es ist auch gut zu wissen, ob ein Knoten ein linkes Kind oder ein rechtes Kind ist: Wenn die normale Aufteilung von 2 einen Rest hat, dann ist dies ein linker Knoten von Null-basierter Indexierung. Wenn die normale Division von 2 keinen Rest hat, ist dies ein rechter Knoten durch Zero-basierte Indexierung.

Der Code in C, um zu wissen, ob der untergeordnete Knoten ein linker Knoten oder ein rechter Knoten ist, lautet:

if (i%2 == 0)
// Knoten ist ein richtiger Knoten
anders
// Knoten ist der linke Knoten

Nachdem er wusste, dass ein Knoten ein linker Knoten ist, kann der übergeordnete Index als Ganzzahlergebnis von I/2 erhalten werden. Nachdem er weiß, dass ein Knoten ein rechter Knoten ist, kann der übergeordnete Index als Ganzzahlergebnis von (i-1)/2 erhalten werden.

Höhe eines vollen binären Haufens und einiger Indizes

Gesamtzahl der Knoten
Beachten Sie aus dem letzten vollständigen Diagramm darüber, dass sich die Gesamtzahl der Knoten ungefähr verdoppelt. Genau, die nächste Stufe enthält die Anzahl der Knoten, die die neue Gesamtzahl, die Summe aller vorherigen Knoten sowie 1, mal 2, dann minus 1. Wenn die Höhe 1 ist, gibt es 1 Knoten = (0 + 1) x 2 - 1 = 2 - 1 = 21 - 1. Wenn die Höhe 2 ist, gibt es 3 Knoten = (1 + 1) x 2 - 1 = 4 - 1 = 22 - 1. Wenn die Höhe 3 beträgt, gibt es 7 Knoten = (3 + 1) x 2 - 1 = 8 - 1 = 23 - 1. Wenn die Höhe 4 beträgt, gibt es 15 Knoten = (7 + 1) x 2 - 1 = 16 - 1 = 24 - 1. Wenn die Höhe 5 ist, gibt es 31 Knoten = (15 + 1) x 2 - 1 = 32 - 1 = 25 - 1. Wenn die Höhe 6 ist, gibt es 63 Knoten = (31 + 1) x 2 - 1 = 64 - 1 = 26 - 1. Wenn die Höhe 7 ist, gibt es 127 Knoten = (63 + 1) x 2 - 1 = 128 - 1 = 27 - 1; usw.

Im Allgemeinen, wenn die Höhe h ist h,

NEIN. von Knoten = 2H - 1

Letzter Knotenindex
Für einen binären Baum und für die nullbasierte Indexierung ist der letzte Index:

letzter Index = n - 1

wobei n die Gesamtzahl der Knoten ist oder einfach nur die Anzahl der Knoten.

Anzahl der Knoten ohne letzte Zeile
Für einen vollen Binärbaum gibt das zweifache Anzahl der Knoten für die letzte Zeile die Gesamtzahl der Knoten minus 1. Eine andere Möglichkeit, die Anzahl der Knoten für die letzte Zeile entspricht der Anzahl aller vorherigen Knoten, Zeiten zwei plus 1. Die Anzahl der Knoten ohne die letzte Zeile ist also:

NEIN. von Knoten ohne letztes = Ganzzahl Ergebnis von N/2

Dies liegt daran. Zum Beispiel: Wenn die Anzahl der Knoten (insgesamt) 15 beträgt, dann 15/2 = 7½. Das Ganzzahlergebnis 7 wird genommen und die Hälfte weggeworfen. Und 7 ist die Anzahl der Knoten ohne die letzte Zeile - siehe oben.

Index für den ersten Knoten der letzten Zeile
Der Index für den ersten Knoten der letzten Zeile sollte bekannt sein. Für die Zero-basierte Indexierung, wobei der erste Knoten (Element) bei Index 0 liegt, ist der Index für den ersten Knoten der letzten Zeile die Anzahl der Knoten für alle Knoten ohne die letzte Zeile. Es ist:

Ganzzahl Ergebnis von N/2

Beachten Sie, dass im entsprechenden Array die Baumknoten als Elemente bezeichnet werden.

Nach oben sieben und heruntertauchen

Betrachten Sie den folgenden Unterbaum von drei Knoten:

Durch die Mindesthaufen -Eigenschaft sollte der übergeordnete Knoten kleiner oder gleich dem kleinsten der Kinderknoten sein. Der Knoten C muss also mit den geringsten Kinderknoten ausgetauscht werden; Es spielt keine Rolle, ob das geringste links oder das rechte Geschwister ist. Dies bedeutet, dass C mit A austauschen muss, um zu haben:

Als „A“ bewegt. Als C nach unten bewegt, um den Platz von a zu nehmen, ist das nach unten.

Häufe Illustration

Der Haufen, wie oben gezeigt, ist eine teilweise Bestellung vom kleinsten Wert bis zum größten Wert. Es ist keine gründliche Bestellung (nicht sortieren). Wie oben ausgedrückt, kann der Haufen in Baumform oder in Array -Form erfolgen. Wie oben ausgedrückt, hat sich bereits häufiger stattgefunden. In der Praxis wird der Programmierer nicht unbedingt einen Baum finden, der bereits gehoben ist. Er würde eine Liste finden, die vollständig in Unordnung steht (völlig ungeortiert). Diese ungeordnete Liste kann in Form eines Baumes oder in Form eines Arrays existieren. Das Folgende ist ein ungeordneter (ungewöhnlicher) Baum und sein entsprechendes Array:

Das entsprechende Array ist:

10 20 25 6 4 12 15 23 8 7 18 16 Null Null Null
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Der Baum wird Zeilen für Reihen von links nach rechts und von oben nach unten gelesen, während er in die Array-Zellen platziert wird. Lassen Sie den Array-Namen arr sein, und lassen Sie die Variable, die den nullbasierten Index darstellt, i sein i. In diesem Artikel befindet sich die Stammin am Index 0.

Dieser Baum wird teilweise bestellen, um ein Mindesthaufen zu werden. Wenn die teilweise Bestellung abgeschlossen ist, ist dies der Mindesthaufen im Einführungsabschnitt dieses Artikels. In diesem Abschnitt erfolgt die teilweise Bestellung manuell.

Um den häufen (teilweisen Bestellprozess) zu vereinfachen. Fügen Sie Elemente hinzu, deren Werte größer sind als der höchste Wert, der bereits im ungeordneten Haufen liegt. In diesem Artikel erfolgt dies mit dem Array und nicht mit der Grafikform des Baumes.

Das höchste Element (Knoten) ist 25. Lassen Sie die drei Zahlen hinzugefügt, um einen vollen Baum zu machen: 26, 27 und 28. Das entsprechende Array für den vollen Baum wird:

10 20 25 6 4 12 15 23 8 7 18 16 26 27 28
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Wenn die ungeordnete Liste durch die Heap -Definition teilweise bestellt wird, bleiben die letzten drei Elemente an ihren letzten Positionen. und kann leicht aufgegeben werden.

Wenn diese ungeordnete Liste teilweise nach der Heap -Definition bestellt wird, wäre dies die oben angegebene Liste der oben angegebenen (Einführung). Eine teilweise bestellte Liste hat eine Art Sortierung, ist jedoch nicht vollständig (sie ist nicht vollständig sortiert).

Manuelle Umlagerung (Haufen Gebäude)

Das ungeordnete Array kann so platziert werden:

10 20 25 06 04 12 15 23 08 07 18 16 26 27 28

Es gibt 15 Elemente. Ganzzahl Ergebnis von 15/2 ist 7. Die Liste sollte in zwei Hälften unterteilt werden, wobei die erste Hälfte 7 und die zweite Hälfte 8 wie folgt beträgt:

10 20 25 06 04 12 15 | 23 08 07 18 16 26 27 28

Diese Abteilung kann als eine Hauptoperation angesehen werden. Das Heap -Gebäude wird vom rechten Ende mit den 27 und 28 Elementenpaaren fortgesetzt, die als Kinder von 15 Jahren identifiziert wurden. 15 ist weniger als 27 oder 28. Dieser Unterbaum von drei Knoten erfüllt also die Mindesthaufen-Eigenschaft, und die Knoten werden vorerst nicht berührt. Diese Überprüfung kann als ein weiterer Hauptvorgang angesehen werden. Bisher gibt es also zwei Hauptvorgänge (eine Array -Abteilung und ein Scheck).

16 und 26 sind Kinder von 12 Jahren. 12 ist weniger als 16 oder 26. Dieser Unterbaum von drei Knoten erfüllt also die Mindesthaufen-Eigenschaft, und die Knoten werden nicht berührt (vorerst). Diese Überprüfung kann als ein weiterer Hauptvorgang angesehen werden. Bisher gibt es also drei Hauptvorgänge (eine Abteilung und zwei Schecks).

07 und 18 sind die Kinder von 04. 04 ist weniger als 07 oder 18. Dieser Unterbaum von drei Knoten erfüllt also die Mindesthaufen-Eigenschaft, und die Knoten werden nicht berührt (vorerst). Diese Überprüfung kann als ein weiterer Hauptvorgang angesehen werden. Bisher gibt es also vier Hauptvorgänge (eine Abteilung und drei Schecks).

23 und 08 sind die Kinder von 06. 06 ist weniger als 23 oder 08. Dieser Unterbaum von drei Knoten erfüllt also die Mindesthaufen-Eigenschaft, und die Knoten werden nicht berührt (vorerst). Diese Überprüfung kann als ein weiterer Hauptvorgang angesehen werden. Bisher gibt es also fünf Hauptvorgänge (eine Abteilung und vier Schecks).

Alle 8 Elemente der letzten Reihe des Baumes und ihrer Eltern wurden überprüft. Um auf die vorherige Ebene zu gehen, muss der linke Teil des Baumes durch 2 geteilt werden, und das Ganzzahl -Ergebnis wird genommen. Ganzzahl Ergebnis von 7/2 ist 3. Die neue Platzierung der Liste lautet:

10 20 25 | 06 04 12 15 | 23 08 07 18 16 26 27 28

Diese Abteilung kann als eine Hauptoperation angesehen werden. Bisher gibt es also sechs Hauptoperationen (zwei Abteilungen und vier Schecks).

12 und 15 sind die Kinder von 25 Jahren. 25 ist größer als 12 oder 15. Dieser Unterbaum von drei Knoten erfüllt die Mindesthaufen-Eigenschaft nicht, sodass die Knoten berührt werden müssen. Diese Überprüfung kann jedoch weiterhin als ein weiterer Hauptvorgang angesehen werden. Bisher gibt es also sieben Hauptvorgänge (zwei Abteilungen und fünf Schecks).

Das Sieben nach unten muss und möglicherweise bis zur letzten Reihe stattfinden. Jedes Sieben (Tausch) ist die Hauptoperation.

25 wird mit den geringsten seiner Kinder ausgetauscht, 12, um die Konfiguration zu geben:

10 20 12 | 06 04 25 15 | 23 08 07 18 16 26 27 28

25 befindet sich jetzt in der dritten Stufe und nicht mehr in der zweiten Ebene. 25 ist jetzt der Elternteil von 16 und 26. Zu diesem Zeitpunkt ist 25 zufällig größer als 16, aber weniger als 26. Also werden 25 und 16 getauscht. Dieser Tausch ist ein weiterer Hauptvorgang, und so gibt es bisher neun Hauptvorgänge (zwei Abteilungen, fünf Schecks und zwei Swaps). Die neue Konfiguration lautet:

10 20 12 | 06 04 16 15 | 23 08 07 18 25 26 27 28

Auf der zweiten Ebene der angegebenen Liste befanden sich 20 und 25. 25 wurde bis in die letzte Reihe gesiebt. 20 ist noch zu überprüfen.

Derzeit sind 06 und 04 Kinder von 20 Jahren. 20 ist größer als 06 oder 04. Dieser Unterbaum von drei Knoten erfüllt die Mindesthaufen-Eigenschaft nicht, sodass die Knoten berührt werden müssen. Diese Überprüfung kann jedoch weiterhin als ein weiterer Hauptvorgang angesehen werden. Bisher gibt es also zehn Hauptvorgänge (zwei Abteilungen, sechs Schecks und zwei Swaps). Das Sieben nach unten muss und möglicherweise bis zur letzten Reihe stattfinden. Jedes Sieben (Tausch) ist die Hauptoperation.

20 wird mit den geringsten seiner Kinder ausgetauscht, 04, um die Konfiguration zu geben:

10 04 12 | 06 20 16 15 | 23 08 07 18 25 26 27 28

20 befindet sich jetzt in der dritten Stufe und nicht mehr in der zweiten Ebene. 20 ist jetzt die Eltern von 07 und 18. Zu diesem Zeitpunkt ist 20 zufällig größer als 07 oder 18. Also werden 20 und 07 getauscht. Dieser Tausch ist ein weiterer Hauptvorgang, und so gibt es bisher zwölf Hauptvorgänge (zwei Abteilungen, sechs Schecks und vier Swaps). Die neue Konfiguration lautet:

10 04 12 | 06 07 16 15 | 23 08 20 18 25 26 27 28

Die Sieben des vorherigen Weges sind beendet. Der linke Teil, der nicht vollständig überprüft wurde, muss in zwei (auf die vorherige Ebene gehen) unterteilt werden, um:

10 | 04 12 | 06 07 16 15 | 23 08 20 18 25 26 27 28

Ganzzahl Ergebnis von 3/2 ist 1.

Derzeit sind 04 und 12 Kinder von 10 Jahren. 10 ist größer als 04, aber weniger als 12. Dieser Unterbaum von drei Knoten erfüllt die Mindesthaufen-Eigenschaft nicht, sodass die Knoten berührt werden müssen. Diese Überprüfung sollte jedoch weiterhin als eine weitere Hauptoperation angesehen werden. Bisher gibt es also vierzehn Hauptoperationen (drei Abteilungen, sieben Schecks und vier Swaps). Das Sieben nach unten muss und möglicherweise bis zur letzten Reihe stattfinden. Jedes Sieben (Tausch) ist die Hauptoperation.

10 wird mit den geringsten seiner Kinder ausgetauscht, 04, um die Konfiguration zu geben:

04 | 10 12 | 06 07 16 15 | 23 08 20 18 25 26 27 28

10 befindet sich jetzt in der zweiten Ebene und nicht mehr in der ersten Ebene. 10 ist jetzt der Elternteil 06 und 07. Zu diesem Zeitpunkt ist 10 größer als 06 oder 07. Also werden 10 und 06 getauscht. Dieser Tausch ist ein weiterer Hauptvorgang, und so gibt es bisher sechzehn Hauptoperationen (drei Abteilungen, sieben Schecks und sechs Swaps). Die neue Konfiguration lautet:

04 | 06 12 | 10 07 16 15 | 23 08 20 18 25 26 27 28

10 befindet sich jetzt in der dritten Stufe und nicht mehr in der zweiten Ebene. 10 ist jetzt der Elternteil 23 und 08. Zu diesem Zeitpunkt ist 10 weniger als 23, aber größer als 08. Also werden 10 und 08 getauscht. Dieser Tausch ist ein weiterer Hauptvorgang, und so gibt es bisher siebzehn Hauptoperationen (drei Abteilungen, sieben Schecks und sieben Swaps). Die neue Konfiguration lautet:

04 | 06 12 | 08 07 16 15 | 23 10 20 18 25 26 27 28

Nun, die Überprüfung, Division und Austausch begannen im letzten Index und haben den ersten Index mit allen Folgen von Abwärtsbewegungen erreicht. Dies bedeutet, dass das Heap -Gebäude abgeschlossen ist und in diesem Fall siebzehn Hauptbetrieb (drei Abteilungen, sieben Schecks und sieben Swaps). Es gab 15 Elemente, obwohl die letzten drei Dummy -Elemente waren, die zur Vereinfachung des Haufens erforderlich waren.

Algorithmus

Es gibt verschiedene Algorithmen für das Haufen Gebäude. Die oben angegebene Abbildung ist am effizientesten, wenn ein Elternwert mit einem der Kinder, die weniger und nicht immer die geringsten Kinder sind. Die Schritte für den Algorithmus sind:

  • Teilen Sie die gesamte Anzahl von Elementen durch zwei.
  • Fahren Sie von der rechten Hälfte fort, überprüfen Sie ein Paar Geschwister mit dem Elternteil und tauschen Sie gegebenenfalls aus.
  • Wenn alle Knoten des letzten Levels überprüft wurden, gehen Sie mit einem möglichen Austausch auf die vorherige Ebene und wiederholen Sie die beiden beiden Schritte. Der Austausch siebt nach unten, und dies muss möglicherweise die niedrigste Ebene erreichen.
  • Wenn die Wurzel überprüft und möglicherweise getauscht wurde, stoppen Sie.

Zeitkomplexität

Zeitkomplexität ist die relative Laufzeit eines Codes. In diesem Fall ist es die relative Laufzeit des Heap -Bauprozesses. Zeitkomplexität ist tatsächlich die Anzahl der Hauptvorgänge im Code (Programm).

Offiziell soll die zeitliche Komplexität des Algorithmus für diesen Artikel N -Operationen sein, wobei n die Anzahl der Elemente im ungeordneten Array plus die Dummy -Elemente ist. In diesem Fall ist n 15. Die zeitliche Komplexität für diesen Algorithmus beträgt also 15.

Warum sollte es 15 statt 17 sein? Das heißt, warum sollte es n sein? - Nun, da die Aufteilung keine Partition ist, ist die Dauer für jede Divisionsaktion gering und kann vernachlässigt werden. Damit und für die obige Abbildung wird die Anzahl der Hauptoperationen 14 (sieben Schecks und sieben Swaps), wobei die drei Abteilungen ignoriert werden.

Wenn ein übergeordneter Wert mit einem der weniger und nicht immer der geringsten Kinder ausgetauscht wird, wird die allgemeine Überprüfungszeit verkürzt. Dadurch wird die Überprüfung der Zeit klein und so ignoriert. Damit und für die obige Abbildung wird die Anzahl der Hauptoperationen 7 (sieben Swaps), wobei die drei Divisionen ignoriert und die sieben Schecks auch ignoriert werden.

HINWEIS: Für ein gutes Heap -Building -Programm werden nur die Tauschbetriebe (SIFT -Downs in diesem Fall) in der Zeitkomplexität berücksichtigt. In diesem Fall gibt es 7 Operationen und nicht 15. Im Umgang mit der Zeitkomplexität muss die maximal mögliche Anzahl von Operationen gegeben werden.

Es ist möglich, dass alle 15 oben genannten Knoten ausgetauscht werden. Die Zeitkomplexität für dieses Beispiel muss also als 15 und nicht 7 angegeben werden.

Die zeitliche Komplexität für diesen Algorithmus wird im Allgemeinen als:

An)

Wo n ist n, dies ist die Big-O-Notation. Diese Notation verwendet Großbuchstaben O und seine Klammern. Innerhalb der Klammern ist der Ausdruck für die mögliche maximale Anzahl von Vorgängen für den Code (Programm), das abgeschlossen ist.

Codierung in c

Die C-Hauptfunktion, um das oben nicht ordnungsgemäße Array zu höfen, lautet:

int main (int argc, char ** argv)

int n1 = 12;
int a1 [] = 10, 20, 25, 6, 4, 12, 15, 23, 8, 7, 18, 16;
int a2 [] = 10, 20, 25, 6, 4, 12, 15, 23, 8, 7, 18, 16, 26, 27, 28;
Buildheap (A2, N2);
für (int i = 0; i = arr [linksindx] && arr [LeftIndx]> = arr [rightindx])
int temp = arr [parentIndx]; arr [parentindx] = arr [rightindx]; arr [rightindx] = temp;
lastdown = rightindx;

else if (arr [parentIndx]> = arr [rightindx] && arr [rightindx]> = arr [LeftIndx])
int temp = arr [parentIndx]; arr [parentindx] = arr [linksindx]; arr [linksindx] = temp;
lastdown = LeftIndx;

else if (arr [parentindx]> = arr [rightindx] && arr [rightindx] = arr [LeftIndx] && arr [LeftIndx] <= arr[rightIndx])
int temp = arr [parentIndx]; arr [parentindx] = arr [linksindx]; arr [linksindx] = temp;
lastdown = LeftIndx;

Rückkehr Lastdown;

Es gibt eine Sift-Down-Funktion. Es würde die Swap () -Funktion verwenden und rechts auf die niedrigste Ebene in einem Pfad sieben. Es ist:

int Nextindx;
void sifdown (int arr [], int n2, int i)
int linksindx, rechtsindx;
int parentindx = i;
linksindx = 2*i+1;
rightindx = 2*i+2;
if (parentindx = 0)
nextindx = swap (arr, parentindx, linksindx, rightindx);
if (nextindx = halbindx/2; i--)
Siftdown (A2, N2, I);
N = n/2;
if (n> = 1)
Buildheap (A2, n);

Alle oben genannten Codesegmente können zusammengestellt werden, um ein Programm zu bilden, das das nicht ordnungsgemäße Array häuft.

Abschluss

Der effizienteste Algorithmus für häufiger Zeitkomplexität ist:

An)