电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

基于PHP實現堆排序原理及實例詳解

瀏覽:122日期:2022-09-09 18:13:46

堆(heap)是計算機科學中一類特殊的數據結構的統稱,通常是一個可以被看做一棵樹的數組對象。

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

關于堆:

堆中某個節點的值總是不大于或不小于其父節點的值; 堆總是一棵完全二叉樹(下面)。 將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。

完全二叉樹

說到堆排序,就不能不提完全二叉樹,這些基本概念在網上到處都是,我摘了個最簡單的。。

完全二叉樹:除最后一層外,每一層上的節點數均達到最大值;在最后一層上只缺少右邊的若干結點。

我自己總結認為,正是因為有下面兩個特點,

只允許最后一層有空缺結點且空缺在右邊,即葉子結點只能在層次最大的兩層上出現(存儲方式的規則性); 若i>1,tree的雙親為tree[i div 2](其父子結點值的規律性);

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

堆排序

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

本例用求降序的小頂堆來解析。

堆排序步驟如下:

1、我們將數據(49、38、65、97、76、13、27、50)建立一個數組$arr;

2、用數組$arr建立一個小頂堆(主要步驟,會在代碼注釋里解釋,下圖是用一個數組建立小頂堆的過程);

3、將堆的根(最小的元素)與最后一個葉子交換,并將堆長度減一,跳到第二步;

4、重復2-3步,直到堆中只有一個結點,排序完成。

基于PHP實現堆排序原理及實例詳解

堆排序的PHP實現

//因為是數組,下標從0開始,所以,下標為n根結點的左子結點為2n+1,右子結點為2n+2; //初始化值,建立初始堆$arr=array(49,38,65,97,76,13,27,50);$arrSize=count($arr);//將第一次排序抽出來,因為最后一次排序不需要再交換值了。buildHeap($arr,$arrSize);for($i=$arrSize-1;$i>0;$i--){ swap($arr,$i,0); $arrSize--; buildHeap($arr,$arrSize); }//用數組建立最小堆function buildHeap(&$arr,$arrSize){ //計算出最開始的下標$index,如圖,為數字'97'所在位置,比較每一個子樹的父結點和子結點,將最小值存入父結點中 //從$index處對一個樹進行循環比較,形成最小堆 for($index=intval($arrSize/2)-1; $index>=0; $index--){ //如果有左節點,將其下標存進最小值$min if($index*2+1<$arrSize){ $min=$index*2+1; //如果有右子結點,比較左右結點的大小,如果右子結點更小,將其結點的下標記錄進最小值$min if($index*2+2<$arrSize){if($arr[$index*2+2]<$arr[$min]){ $min=$index*2+2;} } //將子結點中較小的和父結點比較,若子結點較小,與父結點交換位置,同時更新較小 if($arr[$min]<$arr[$index]){swap($arr,$min,$index); } } }}//此函數用來交換下數組$arr中下標為$one和$another的數據function swap(&$arr,$one,$another){ $tmp=$arr[$one]; $arr[$one]=$arr[$another]; $arr[$another]=$tmp;}

下面是排序的最終結果:

基于PHP實現堆排序原理及實例詳解

堆用來進行全排序,時間復雜度是O(nlogn)

而快排用來全排序,平均時間復雜度也是O(nlogn)

但堆排序可以用來求 TopK 時,堆的時間復雜度為O(Klog2(n),因為它只需要進行 K 輪排序即可。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: PHP
相關文章:
主站蜘蛛池模板: 金环宇|金环宇电线|金环宇电缆|金环宇电线电缆|深圳市金环宇电线电缆有限公司|金环宇电缆集团 | 包装机传感器-搅拌站传感器-山东称重传感器厂家-济南泰钦电气 | 工业机械三维动画制作 环保设备原理三维演示动画 自动化装配产线三维动画制作公司-南京燃动数字 聚合氯化铝_喷雾聚氯化铝_聚合氯化铝铁厂家_郑州亿升化工有限公司 | 吹田功率计-长创耐压测试仪-深圳市新朗普电子科技有限公司 | 阻垢剂-反渗透缓蚀阻垢剂厂家-山东鲁东环保科技有限公司 | 农业仪器网 - 中国自动化农业仪器信息交流平台 | 带式过滤机厂家_价格_型号规格参数-江西核威环保科技有限公司 | 硅PU球场、篮球场地面施工「水性、环保、弹性」硅PU材料生产厂家-广东中星体育公司 | 超声骨密度仪-骨密度检测仪-经颅多普勒-tcd仪_南京科进实业有限公司 | 液压压力机,液压折弯机,液压剪板机,模锻液压机-鲁南新力机床有限公司 | 杭州高温泵_热水泵_高温油泵|昆山奥兰克泵业制造有限公司 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 光泽度计_测量显微镜_苏州压力仪_苏州扭力板手维修-苏州日升精密仪器有限公司 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 神马影院-实时更新秒播| 儿童乐园|游乐场|淘气堡招商加盟|室内儿童游乐园配套设备|生产厂家|开心哈乐儿童乐园 | 杭州门窗厂家_阳光房_包阳台安装电话-杭州窗猫铝合金门窗 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 恒湿机_除湿加湿一体机_恒湿净化消毒一体机厂家-杭州英腾电器有限公司 | 彩信群发_群发彩信软件_视频短信营销平台-达信通 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 电液推杆生产厂家|电动推杆|液压推杆-扬州唯升机械有限公司 | 礼仪庆典公司,礼仪策划公司,庆典公司,演出公司,演艺公司,年会酒会,生日寿宴,动工仪式,开工仪式,奠基典礼,商务会议,竣工落成,乔迁揭牌,签约启动-东莞市开门红文化传媒有限公司 | 法兰连接型电磁流量计-蒸汽孔板节流装置流量计-北京凯安达仪器仪表有限公司 | 预制围墙_工程预制围墙_天津市瑞通建筑材料有限公司 | 温控器生产厂家-提供温度开关/热保护器定制与批发-惠州市华恺威电子科技有限公司 | 环境模拟实验室_液体-气体控温机_气体控温箱_无锡双润冷却科技有限公司 | 硫酸亚铁-聚合硫酸铁-除氟除磷剂-复合碳源-污水处理药剂厂家—长隆科技 | 北京易通慧公司从事北京网站优化,北京网络推广、网站建设一站式服务商-北京网站优化公司 | 10吨无线拉力计-2吨拉力计价格-上海佳宜电子科技有限公司 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | 蜜蜂职场文库_职场求职面试实用的范文资料大全| 威客电竞(vk·game)·电子竞技赛事官网 | 厦门ISO认证|厦门ISO9001认证|厦门ISO14001认证|厦门ISO45001认证-艾索咨询专注ISO认证行业 | 等离子表面处理机-等离子表面活化机-真空等离子清洗机-深圳市东信高科自动化设备有限公司 | 污水/卧式/潜水/钻井/矿用/大型/小型/泥浆泵,价格,参数,型号,厂家 - 安平县鼎千泵业制造厂 | 乐考网-银行从业_基金从业资格考试_初级/中级会计报名时间_中级经济师 | 科昊仪器超纯水机系统-可成气相液氮罐-美菱超低温冰箱-西安昊兴生物科技有限公司 | 青岛球场围网,青岛车间隔离网,青岛机器人围栏,青岛水源地围网,青岛围网,青岛隔离栅-青岛晟腾金属制品有限公司 | 警用|治安|保安|不锈钢岗亭-售货亭价格-垃圾分类亭-移动厕所厂家-苏州灿宇建材 | 杜康白酒加盟_杜康酒代理_杜康酒招商加盟官网_杜康酒厂加盟总代理—杜康酒神全国运营中心 |