如何使用PHP編寫堆排序演算法
堆排序是一種高效的排序演算法,它的核心思想是將待排序的序列建構成一個二元堆,然後透過不斷調整堆的結構來實現排序。本文將介紹如何使用PHP編寫堆排序演算法,並提供程式碼範例供參考。
下面是一個用PHP實現的堆調整函數範例:
function heapify(&$arr, $n, $i) { $largest = $i; // 将当前节点标记为最大值节点 $l = 2 * $i + 1; // 左子节点 $r = 2 * $i + 2; // 右子节点 // 如果左子节点大于根节点 if ($l < $n && $arr[$l] > $arr[$largest]) { $largest = $l; } // 如果右子节点大于根节点 if ($r < $n && $arr[$r] > $arr[$largest]) { $largest = $r; } // 如果最大值不等于当前节点,则交换它们的位置 if ($largest != $i) { $temp = $arr[$i]; $arr[$i] = $arr[$largest]; $arr[$largest] = $temp; // 递归调整交换之后的子树 heapify($arr, $n, $largest); } }
function heapSort(&$arr) { $n = count($arr); // 构建最大堆 for ($i = ($n / 2) - 1; $i >= 0; $i--) { heapify($arr, $n, $i); } // 排序 for ($i = $n - 1; $i > 0; $i--) { // 交换堆顶和最后一个元素 $temp = $arr[0]; $arr[0] = $arr[$i]; $arr[$i] = $temp; // 调整剩余元素的顺序 heapify($arr, $i, 0); } }
$arr = [3, 7, 2, 11, 1, 9, 6, 4, 8]; echo "排序前:" . implode(", ", $arr) . " "; heapSort($arr); echo "排序后:" . implode(", ", $arr) . " ";
排序前:3, 7, 2, 11, 1, 9, 6, 4, 8 排序后:1, 2, 3, 4, 6, 7, 8, 9, 11
堆排序是一種高效的排序演算法,透過建立最大(或最小)堆來實現排序。透過調整堆的結構,我們可以方便地實現堆排序。使用PHP編寫堆排序演算法相對簡單,只需編寫堆調整函數和堆排序函數,並將待排序的陣列作為參數傳遞即可實現排序。希望本文的內容能對你理解和使用堆排序演算法提供一些幫助。
以上是如何使用PHP編寫堆排序演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!