加入收藏 | 设为首页 | 会员中心 | 我要投稿 南通站长网 (https://www.0513zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

php实现堆排序的原理如何理解?一文带你看明白

发布时间:2022-04-07 15:45:32 所属栏目:语言 来源:互联网
导读:很多新手在学习数据结构的时候,对于堆排序不是很理解,因此这篇文章就给大家介绍一下基于php实现堆排序的原理以及实例,有这方面学习需要的朋友可以参考学习。 堆(heap)是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵树的数组对象。 堆
       很多新手在学习数据结构的时候,对于堆排序不是很理解,因此这篇文章就给大家介绍一下基于php实现堆排序的原理以及实例,有这方面学习需要的朋友可以参考学习。
  
       堆(heap)是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵树的数组对象。
 
       堆{k1,k2,ki,…,kn} (ki <= k2i,ki <= k2i+1)|(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4...n/2)
 
       关于堆:
 
堆中某个节点的值总是不大于或不小于其父节点的值;
堆总是一棵完全二叉树(下面)。
将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。
       完全二叉树
 
       说到堆排序,就不能不提完全二叉树,这些基本概念在网上到处都是,我摘了个最简单的。
 
       完全二叉树:除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点。
 
       我自己总结认为,正是因为有下面两个特点,
 
//此函数用来交换下数组$arr中下标为$one和$another的数据
function swap(&$arr,$one,$another){
  $tmp=$arr[$one];
  $arr[$one]=$arr[$another];
  $arr[$another]=$tmp;
}
       下面是排序的最终结果:
 
 
 
       堆用来进行全排序,时间复杂度是O(nlogn),而快排用来全排序,平均时间复杂度也是O(nlogn)。但堆排序可以用来求 TopK 时,堆的时间复杂度为O(Klog2(n),因为它只需要进行 K 轮排序即可。

(编辑:南通站长网)

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

    热点阅读