尽管在大多数机器上,它的实际运行速度比实现良好的快速排序要慢一些,但它的优势是在最坏情况下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教程
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答