javascript堆排序算法的详细解决方案

javascript堆排序算法的详细解决方案
堆排序分为两个过程:

1。堆桩。

堆本质上是一个完整的二叉树。它必须满足:树中非叶节点的任何键不大于或小于其左右两个孩子的关键字。

该堆分为:根堆和根堆堆、堆排序升序根、小堆堆序。

如果它是一个大的根堆,则通过调整函数将具有最大值的节点调整到堆根。

2、将堆保存在尾部,并将调整函数调用到剩余的序列中。调整完成后,最大鞋跟被保存在尾部- 1(- 1,- 2,…- I),然后剩余的序列被调整,并且过程被重复直到排序完成。

复制代码代码如下所示:

调整函数

功能headadjust(元素、POS,Len){

将保存当前节点的值。

var =元素};

位置到当前节点左子节点

var * = 2 + 1;

递归地,直到没有节点为止

当(子图){

如果当前节点有正确的子节点,以及大型场合的右子节点,则右子节点

与当前节点

如果(子+ 1 <元素} {子} <元素{子+ 1 }){

子=1;

}

当前节点和最大节点的比较小于交换、交换后当前节点位置的值。

在子节点中

如果(元素{ } } <元素{子}){

元素{ } } =元素{子};

儿童=;

子= 2 + 1;

}

别的{

打破;

}

元素{ } =交换;

}

}

施工桩

功能buildheap(元素){

节点从上一次启动带有子节点,比较节点及其子节点,

与节点交换的最大数目,经过交换,然后依次转发同一个节点进行交换处理,

直到构建了一个大的(升到堆顶,降到小顶部)

对于(var i =元素.长度 2;i = 0;i -){

headadjust(元素,我的元素。长度);

}

}

函数排序(元素){

施工桩

buildheap(元素);

从尾/序列调整开始

对于(var i = elements.length-1;我> 0;我--){

栈顶始终是最大的元素,因此,将是堆的顶部,尾部元素将交换。

存储在尾部的最大元素,不参与后面的调整。

var =元素{ };

元素{元素} { 0 };

元素{ 0 } =交换;

/调整最大调整到堆栈元素的顶部)

headadjust(元素、0、我);

}

}

var元素= { 3, 1, 5、7, 2, 4、9, 6, 10、8 };

console.log(在:+元素);

排序(元素);

console.log(':' +元素);
效率:

时间复杂度:最好的:O(Nlog2N),最差的:O(Nlog2N),平均O(Nlog2N)。

空间复杂度:o(1)。

稳定性:不稳定

tag:堆排序解决方案算法详细电脑软件

相关内容