首页 > 学院 > 逻辑算法 > 正文

PHP实现堆排序算法(代码示例)

2020-03-22 18:09:45
字体:
来源:转载
供稿:网友
计算机科学中,heapsort(1964年由J. W. J. Williams发明)是一种基于比较的排序算法。Heapsort(堆排序)可以看作是一种改进的选择排序:与该算法类似,它将输入分为已排序区域和未排序区域,并通过提取最大的元素并将其移动到已排序区域来交互式地缩小未排序区域。改进包括使用堆数据结构,而不是线性时间搜索来找到最大值。

尽管在大多数机器上,它的实际运行速度比实现良好的快速排序要慢一些,但它的优势是在最坏情况下O(n log n)运行时更有利。堆排序是一种就地排序算法,但它不是一种稳定排序。

heapsort算法对一组随机排列的值进行排序。在算法的第一阶段,数组元素被重新排序以满足堆属性。在进行实际排序之前,将简要展示堆树结构以供说明。

PHP堆排序算法思路示意图:

Sorting_heapsort_anim.gif

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教程

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表