Heim >Backend-Entwicklung >PHP-Tutorial >Lernen Sie die Prinzipien und die Zeitkomplexitätsanalyse des Heap-Sortieralgorithmus in PHP kennen.
Lernen Sie die Prinzipien und die zeitliche Komplexitätsanalyse des Heap-Sortieralgorithmus in PHP kennen.
Heap-Sortierung ist ein Sortieralgorithmus, der auf der Heap-Datenstruktur basiert und dessen zeitliche Komplexität O(nlogn) ist. In diesem Artikel werden die Prinzipien des Heap-Sortieralgorithmus in der PHP-Sprache vorgestellt und Codebeispiele bereitgestellt.
1. Die Definition und Eigenschaften eines Heaps
Bevor Sie die Heap-Sortierung lernen, müssen Sie zunächst die Definition und Eigenschaften eines Heaps verstehen. Ein Heap ist ein vollständiger Binärbaum, in dem der Wert jedes Knotens größer oder gleich dem Wert seiner untergeordneten Knoten ist. Wir nennen einen solchen Heap einen Big-Max-Heap. Wenn dagegen der Wert jedes Knotens kleiner oder gleich dem Wert seines untergeordneten Knotens ist, nennen wir ihn einen kleinen oberen Heap.
Aufgrund der Eigenschaften des Heaps ist das oberste Element des Heaps der Maximal- oder Minimalwert. Daher betrachten wir bei der Heap-Sortierung das zu sortierende Array normalerweise als vollständigen Binärbaum und verwenden dafür die Eigenschaften des Heaps Sortierung.
2. Prinzip des Heap-Sortieralgorithmus
Der Heap-Sortieralgorithmus ist hauptsächlich in zwei Schritte unterteilt: Erstellen eines Heaps und Anpassen des Heaps.
Die Schritte sind wie folgt:
Die Schritte sind wie folgt:
Die Schritte sind wie folgt:
3. PHP-Codebeispiel
Das Folgende ist ein Beispielcode für die Implementierung des Heap-Sortieralgorithmus in der PHP-Sprache:
function heapSort(&$arr) { $length = count($arr); // 构建大顶堆 for ($i = floor($length/2 - 1); $i >= 0; $i--) { adjustHeap($arr, $i, $length); } // 调整堆并排序 for ($i = $length - 1; $i >= 0; $i--) { // 交换堆顶元素和最后一个叶子节点 $temp = $arr[0]; $arr[0] = $arr[$i]; $arr[$i] = $temp; // 调整堆使其保持大顶堆性质 adjustHeap($arr, 0, $i); } } function adjustHeap(&$arr, $i, $length) { $largest = $i; // 最大值的位置 $left = $i * 2 + 1; // 左子节点的位置 $right = $i * 2 + 2; // 右子节点的位置 // 比较当前节点与左右子节点的值,找到最大值的位置 if ($left < $length && $arr[$left] > $arr[$largest]) { $largest = $left; } if ($right < $length && $arr[$right] > $arr[$largest]) { $largest = $right; } // 如果最大值的位置不是当前节点的位置,则交换两个位置的值,并递归调整堆 if ($largest != $i) { $temp = $arr[$i]; $arr[$i] = $arr[$largest]; $arr[$largest] = $temp; adjustHeap($arr, $largest, $length); } } // 测试 $arr = [8, 3, 6, 2, 9, 1]; heapSort($arr); print_r($arr); // 输出 [1, 2, 3, 6, 8, 9]
4. Die Zeitkomplexität der Heap-Sortierung beträgt O(nlogn). Unter diesen beträgt die zeitliche Komplexität des Aufbaus des Heaps O(n) und die zeitliche Komplexität der Anpassung des Heaps beträgt O(logn). Da n Elemente sortiert werden müssen, beträgt die Gesamtzeitkomplexität O(nlogn).
Zusammenfassung
In diesem Artikel werden die Prinzipien des Heap-Sortieralgorithmus in der PHP-Sprache ausführlich vorgestellt und entsprechende Codebeispiele bereitgestellt. Heap Sort ist ein effizienter Sortieralgorithmus, der sich für die Sortierung großer Arrays eignet. Durch das Erlernen des Heap-Sortieralgorithmus können Sie Ihr Verständnis und Ihre Anwendungsmöglichkeiten für Datenstrukturen und Algorithmen weiter verbessern.
Das obige ist der detaillierte Inhalt vonLernen Sie die Prinzipien und die Zeitkomplexitätsanalyse des Heap-Sortieralgorithmus in PHP kennen.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!