[PHP]算法-堆排序的PHP实现
发布时间:2020-05-25 23:01:40 所属栏目:PHP 来源:互联网
导读:1.堆(二叉堆):可以视为一棵完全的二叉树,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,每一个结点对应数组中的一个元素2.给出某个结点的下标,可以计算出父结点的和孩子结点的下标; parent(i)=floor(i/2) left(i)=2i right=2i+13.最大堆和最小堆
|
<div class="cnblogs_code"> 1.堆(二叉堆):可以视为一棵完全的二叉树,除了最底层之外,每一层都是满的,这使得堆可以利用数组来表示,2.给出某个结点的下标,可以计算出父结点的和孩子结点的下标; parent(i)=(i/2) left(i)=2i right=2i+1
3.最大堆和最小堆,最大堆:根结点是最大值,最小堆:4.堆排序就是把最大堆堆顶的最大数取出,剩余的堆继续调整为最大堆,再次将堆顶的最大数取出,5.最大堆调整(维护最大堆,子节点永远小于父结点) ;创建最大堆(把一个数组调整成最大堆的数组);堆排序(创建最大堆,交换,,index,heapSize)
iMax,iLeft, =index;iLeft=2*index+1;iRight=2*index+2,,)
iParent=((size-1)/2 i=iParent;i>=0;i--,i,,heapSize);
(int i = heapSize - 1; i > 0; i--,i);
maxHeapify(,i);
swap(&,,=[[]=[[]=
heapSort(&=(,);
( = - 1; > 0; --,);
maxHeapify(,);
buildMaxHeap(&,=((-1)/2);
(=;>=0;--){
maxHeapify(,,);
maxHeapify(&,,=0;=0;=0(==2*+1=2*+2(< && []>[=(< && []>[=(!=,==(2,1,3,5,9,6(); (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
