盡管在大多數機器上,它的實際運行速度比實現良好的快速排序要慢一些,但它的優勢是在最壞情況下O(n log n)運行時更有利。堆排序是一種就地排序算法,但它不是一種穩定排序。
heapsort算法對一組隨機排列的值進行排序。在算法的第一階段,數組元素被重新排序以滿足堆屬性。在進行實際排序之前,將簡要展示堆樹結構以供說明。
PHP堆排序算法思路示意圖:
PHP堆排序實現代碼如下:
?phphtml' target='_blank'>class Node private $_i; public function __construct($key) $this- _i = $key; public function getKey() return $this- class Heap private $heap_Array; private $_current_Size; public function __construct() $heap_Array = array(); $this- _current_Size = 0;
$this- heap_Array[0] = $this- heap_Array[--$this- _current_Size]; $this- bubbleDown(0); return $root;
if ($rightChild $this- _current_Size $this- heap_Array[$leftChild] $this- heap_Array[$rightChild]) $larger_Child = $rightChild; } else { $larger_Child = $leftChild; if ($top- getKey() = $this- heap_Array[$larger_Child]- getKey()) { break;
for ($j = 0; $j sizeof($this- heap_Array); $j++) { $arr[] = $this- heap_Array[$j]- getKey(); return $arr;function heapsort(Heap $Heap) $size = $Heap- getSize(); for ($j = (int)($size/2) - 1; $j $j--) $Heap- bubbleDown($j); for ($j = $size-1; $j $j--) { $BiggestNode = $Heap- remove(); $Heap- insertAt($j, $BiggestNode); return $Heap- asArray();$arr = array(3, 0, 2, 5, -1, 4, 1);echo 原始數組 : echo implode( , ,$arr );$Heap = new Heap();foreach ($arr as $key = $val) { $Node = new Node($val); $Heap- insertAt($key, $Node); $Heap- incrementSize();$result = heapsort($Heap);echo /n排序后數組 : echo implode( , ,$result). /n
輸出:
原始數組 : 3, 0, 2, 5, -1, 4, 1 排序后數組 : -1, 0, 1, 2, 3, 4, 5
本篇文章就是關于PHP堆排序的介紹,希望對需要的朋友有所幫助!
以上就是PHP實現堆排序算法(代碼示例)的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答