PHP堆排序原理及应用方法

PHP堆排序原理及应用方法
本文介绍了PHP堆排序的原理和应用,供大家参考,具体分析如下:

下面是用PHP作为描述语言的堆排序原则的更详细的解释。由于程序的可读性,没有进行优化,PHP程序中关于堆的一些概念如下:

假设n是当前数组的关键,母的N是N>>1或n / 2(分);左子节点为N = N << 1或L = N×2,和N的右子节点是r(n<<1)。

$ ARR =阵列(1,8,7,2,3,4,6,5,9);

该数组ARR原配置如下:



/

八十七
二千三百四十六

/

五十九

堆排序($ ARR);print_r($ ARR);

排序后生成标准的小顶堆结构如下:



/

二十三
四千五百六十七

/

八十九

数组:数组(1,2,3,4,5,6,7,8,9):

复制代码如下:功能排序($ ARR)

{

对于一个最后元/

美元上=计数($ ARR);

/ /堆排序是忽视美元的ARR { 0 }

array_unshift($ ARR,0);

/最后一个非叶节点

$ $ =最后$ > 1;
组织成大的堆顶,最大数量的堆顶,和最大数和桩尾交换,并计算在忽略数组的最大数(最后),直到桩底(最后=桩)。

虽然(真实)

{

Adjustnode(合我,最后美元美元,ARR);

如果($ 1)

{

移动节点指针遍历所有非叶节点

一美元—;

}

其他的

{

/临界点最后= 1,所有排序

如果($ = 1)中断;

/ /当我1每次堆栈将最大数量的整理说(栈顶,$ ARR { 1 }),在根节点反复调整堆

互换(ARR {一}美元美元美元,ARR { 1 });

在数组的结尾按大小保留最大数,定义最后一个临界点,以避免堆后打乱好数组元素的后面排列。

最后一美元--;

}

}

第一个数组元素

array_shift($ ARR);

}
完成当前树节点($ n),在临界点最后一个元素的顺序很好。

功能adjustnode(N亿美元,美元,美元,ARR)

{

$ l = n <<1;左子$

如果(!isset($ ARR { $ L })|美元美元| L >最后)返回;

$ = $ l + 1;右边的子项为
如果孩子比孩子左到右,那么让正确的子节点比父节点

如果($r$ ARR { $ L })$ = $ r;

如果中子l / L l节点比父节点$ n,那么与父节点交换$ n

如果($ ARR { $ L } > { } ARR美元美元)

{

子节点($ l)和交换的父节点(n)值的值。

互换($ ARR { $ L },{ } ARR美元美元);

交换/父节点(N)值($ ARR { $ n })可能小于原子节点($ L)节点的值,所以需要原子节点($ L)节点调整使用递归

Adjustnode(l美元美元美元,去年,ARR);

}

}
两个/交换值

函数交换($ A,b)

{

$ =;

美元=;

$ =;

}

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

tag:方法堆排序原理电脑软件php

相关内容