加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

PHP排序算法之堆排序(Heap Sort)实例详解

发布时间:2021-05-23 10:39:24 所属栏目:编程 来源:网络整理
导读:本篇章节讲授PHP排序算法之堆排序(Heap Sort)。供各人参考研究详细如下: 算法引进: 在这里我直接引用《》内里的开头: 在前面讲到 ,它在待排序的 n 个记录中选择一个最小的记录必要较量 n - 1 次,原来这也可以领略,查找第一个数据必要较量这

本篇章节讲授PHP排序算法之堆排序(Heap Sort)。分享给各人供各人参考,详细如下:

算法引进:

在这里我直接引用《》内里的开头:

在前面讲到 ,它在待排序的 n 个记录中选择一个最小的记录必要较量 n - 1 次,原来这也可以领略,查找第一个数据必要较量这么多次是正常的,不然怎样知道他是最小的记录。

痛惜的是,这样的操纵并没有把每一趟的较量功效生涯下来,在后一趟的较量重,有很多较量在前一趟已经做过了,但因为前一趟排序时未生涯这些较量功效,所往后一趟排序时又一再执行了这些较量操纵,因而记录的较量次数较多。

假如可以做到每次在选择到最小记录的同时,并按照较量功效对其他记录做出响应的调解,那样排序的总体服从就会很是高了。而堆排序,就是对简朴选择排序举办的一种改造,这种改造的结果长短常明明的。

根基头脑:

在先容堆排序之前,我们先来先容一下堆:

《》里的界说:堆 是具有下列性子的完全二叉树:每个节点的值都大于或便是其阁下孩子节点的值,成为大顶堆(大根堆);可能每个节点的值都小于或便是其阁下节点的值,成为小顶堆(小根堆)。

其时我在看到这里的时辰也对有“堆是否是完全二叉树”有过疑问,网上也有说不是完全二叉树的,可是无论堆是不是完全二叉树,尚且保存意见。我们只要知道,在这里我们回收完全二叉树情势的大根堆(小跟堆),首要是为了利便存储和计较(后头我们会看到带来的便利)。

PHP排序算法之堆排序(Heap Sort)实例详解

堆排序算法:

堆排序就是操作堆(假设操作大根堆)举办排序的要领,它的根基头脑是:

大根堆排序算法的根基操纵:

在这个进程中是必要大量的图示才气看的大白的,可是我懒。。。。。。

算法实现:

= $arr[$j]){ break; //已经满意大根堆 } //将根节点配置为子节点的较大值 $arr[$start] = $arr[$j]; //继承往下 $start = $j; } $arr[$start] = $temp; } function HeapSort(array &$arr){ $count = count($arr); //先将数组结构成大根堆(因为是完全二叉树,以是这里用floor($count/2)-1,下标小于或便是这数的节点都是有孩子的节点) for($i = floor($count / 2) - 1;$i >= 0;$i --){ HeapAdjust($arr,$i,$count); } for($i = $count - 1;$i >= 0;$i --){ //将堆顶元素与最后一个元素互换,获取到最大元素(互换后的最后一个元素),将最大元素放到数组末端 swap($arr,$i); //颠末互换,将最后一个元素(最大元素)离开大根堆,并将未经排序的新树($arr[0...$i-1])从头调解为大根堆 HeapAdjust($arr,$i - 1); } } $arr = array(9,1,5,8,3,7,4,6,2); HeapSort($arr); var_dump($arr);

运行功效:

int(1) [1]=> int(2) [2]=> int(3) [3]=> int(4) [4]=> int(5) [5]=> int(6) [6]=> int(7) [7]=> int(8) [8]=> int(9) }

时刻伟大度说明:

它的运行时刻只要是耗损在初始构建对和在重建堆屎的重复筛选上。

总体上来说,堆排序的时刻伟大度是

堆排序是一种不不变排序要领。

本文参考自《》,在此仅作记录,利便往后查阅,大神勿喷!

PS:这里再为各人保举一款关于排序的演示器材供各人参考:

在线动画演示插入/选择/冒泡/合并/希尔/快速排序算法进程器材:

更多关于PHP相干内容感乐趣的读者可查察本站专题:《》、《》、《》、《》、《》、《》及《》

但愿本文所述对各人PHP措施计划有所辅佐。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读