位置: 编程技术 - 正文

PHP实现的堆排序算法详解(php 堆排序)

编辑:rootadmin

推荐整理分享PHP实现的堆排序算法详解(php 堆排序),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php堆排序代码,php 排序,php实现排序算法,php 堆排序,php 堆排序,php的堆和栈,php 堆,php实现排序算法,内容如对您有帮助,希望把文章链接给更多的朋友!

本文实例讲述了PHP实现的堆排序算法。分享给大家供大家参考,具体如下:

经验

工作了,面试我工作这家公司时被技术面打击得不行,因为自己的数据结构等基础学得实在太差,虽然原来是想做设计师的说。。。不过看在PHP写得还凑合的份上能来实习了,但还是决心恶补一下基础。 其实自己之前也确实感觉到了基础的重要性,一些比较深的东西都比较底层,不学好根本没法进行。像我之前用PHP做websocket,就牵扯到数据包、数据帧等概念,搞不清楚,连数据都没法处理,还得后来补。所以我准备重新学一下数据结构,算法,网络等基础知识,也在此跟大家提个醒,别像我一样走反了方向,甚至到明白过来就已经晚了。

今天来说一下被问到的堆排序的问题,当时被问到时,连完全二叉树的概念都忘了。不过幸好我还有一点点数据结构基础,看了点资料也有些明白了,所以想用PHP写一下二叉树的堆排序,顺便也复习下二叉树,堆等数据结构。

堆(heap)是计算机科学中一类特殊的数据结构的统称,通常是一个可以被看做一棵树的数组对象。

堆{k1,k2,ki,…,kn} (ki <= k2i,ki <= k2i+1)|(ki >= k2i,ki >= k2i+1), (i = 1,2,3,4...n/2)

关于堆:

堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树(下面)。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。

完全二叉树

说到堆排序,就不能不提完全二叉树,这些基本概念在网上到处都是,我摘了个最简单的。。

完全二叉树:除最后一层外,每一层上的节点数均达到最大值;在最后一层上只缺少右边的若干结点。

PHP实现的堆排序算法详解(php 堆排序)

我自己总结认为,正是因为有下面两个特点,

1. 只允许最后一层有空缺结点且空缺在右边,即叶子结点只能在层次最大的两层上出现(存储方式的规则性);2. 若i>1,tree的双亲为tree[i div 2](其父子结点值的规律性);

才使得其进行排序非常方便。

堆排序

堆排序求升序用大顶堆,求降序用小顶堆。

本例用求降序的小顶堆来解析。

堆排序步骤如下:

1、我们将数据(、、、、、、、)建立一个数组$arr;2、用数组$arr建立一个小顶堆(主要步骤,会在代码注释里解释,下图是用一个数组建立小顶堆的过程);3、将堆的根(最小的元素)与最后一个叶子交换,并将堆长度减一,跳到第二步;4、重复2-3步,直到堆中只有一个结点,排序完成。

堆排序的PHP实现

下面是排序的最终结果:

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php排序算法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP常用遍历算法与技巧总结》及《PHP数学运算技巧总结》

希望本文所述对大家PHP程序设计有所帮助。

PHP基于Closure类创建匿名函数的方法详解 本文实例讲述了PHP基于Closure类创建匿名函数的方法。分享给大家供大家参考,具体如下:Closure类用于代表匿名函数的类。匿名函数(在PHP5.3中被引入)

PHP实现基于回溯法求解迷宫问题的方法详解 本文实例讲述了PHP实现基于回溯法求解迷宫问题的方法。分享给大家供大家参考,具体如下:引言最近在leetcode上看了些算法题,有些看着很简单的很常

PHP实现执行外部程序的方法详解 本文实例讲述了PHP实现执行外部程序的方法。分享给大家供大家参考,具体如下:在一些特殊情况下,会使用PHP调用外部程序执行,比如:调用shell命令

标签: php 堆排序

本文链接地址:https://www.jiuchutong.com/biancheng/287509.html 转载请保留说明!

上一篇:基于php编程规范(详解)(php编程基础与案例开发)

下一篇:PHP基于Closure类创建匿名函数的方法详解(php类的使用)

  • 小规模纳税人开普票要交税吗
  • 疫情期间固定资产折旧优惠政策
  • 财务上大写的元怎么写
  • 旅行社给游客买保险的步骤是什么
  • 固定资产一次性折旧的账务处理和税务处理
  • 工会经费如何做会计分录科目
  • 建筑业预缴税款都要填哪些表
  • 服务业发票丢失怎么处理
  • 企业必须要现金流入吗
  • 递延所得税费用影响净利润吗
  • 如何开具红字专用发票信息表
  • 小规模纳税人未达起征点增值税处理
  • 新金融工具准则投资收益
  • 以前年度损益对应的科目
  • 销售商品收到货款20000元存入银行
  • macbookpro磁盘需要分区吗
  • 2021年windows最新版本
  • win11专业版企业版家庭版哪个玩游戏好
  • 微信支付宝收款码二合一
  • 手工明细分类账本怎么记
  • win10怎么找应用程序
  • deepin下载教程
  • 对公账户代扣
  • 代扣代缴个人所得税账务处理
  • 长期借款和应付利息
  • windows10记事本
  • 建筑企业异地预缴企业所得税
  • php消息队列kafka
  • php常用方法
  • 微信小程序开发一个多少钱
  • php引用返回用法怎么用
  • python的复制命令
  • face_recognition库采用了什么算法
  • 2023年美赛春季赛成绩查询
  • upf命令
  • 现代c++教程
  • 企业所得税纳税人包括哪些类型
  • 车辆上牌费用会涨吗
  • 上季度的发票开出去了可以作废吗
  • 合同资产与应收账款的关系
  • python中的列表和元祖有什么区别
  • 微信小程序实现支付功能
  • 买轿车产生的服务费用
  • 现金流量表存货增加额怎么算
  • 税控盘每年的服务费可以全额抵扣吗
  • 销货方和供货方的区别
  • windows下重启mysql服务
  • sqlserver日期加减月份
  • 房租没有发票如何处理
  • 委托代销受托方会计分录
  • 企业其他应付款减少说明什么
  • 固定资产报废会计
  • 折扣 会计处理
  • 哪些合同需要缴税
  • 退了的社保能申请回来吗
  • 企业防止股权收益的措施
  • 营业外支出的性质
  • 装修费用怎么结算
  • 销售费用包括哪些内容?其明细科目有哪些?
  • win10 mysql 5.6.35 winx64免安装版配置教程
  • win8系统出现蓝屏怎样处理
  • windows10周年更新
  • freelibrary 程序崩溃
  • windows10稳定版本
  • linux windows转linux
  • kmswin7激活步骤
  • windows10禁用独立显卡
  • cocos2dx粒子效果
  • javaweb技术栈是什么
  • js创建对象的方法有哪些
  • javascript中math.ceil
  • 关于android中view的说法正确的是
  • C# list多字段排序sort
  • javascript总结笔记
  • js 上传
  • android:theme="@style/apptheme"
  • JavaScript中的6种运算符总结
  • 外经证的有效期是多久
  • 车辆购置税查询不到
  • 专家咨询费包括哪些内容
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设