Javascript Heapsort算法,将最小元素放在末尾
为了便于培训,我用javascript实现了一组排序算法。除了heapsort之外,我的实现已经成功地对整数和单字符串数组进行了排序 我的实现正确地对数组进行排序,除了在返回排序后的数组时将最小的数字放在末尾 我不是计算机科学专业的学生/毕业生,也没有很多编程背景。我正在通过read/try/fail方法学习,但我无法正确地实现这一点 我会把代码和结果放在这段下面。最后,我想补充一点,我正在使用的伪代码作为实现的参考Javascript Heapsort算法,将最小元素放在末尾,javascript,algorithm,heapsort,Javascript,Algorithm,Heapsort,为了便于培训,我用javascript实现了一组排序算法。除了heapsort之外,我的实现已经成功地对整数和单字符串数组进行了排序 我的实现正确地对数组进行排序,除了在返回排序后的数组时将最小的数字放在末尾 我不是计算机科学专业的学生/毕业生,也没有很多编程背景。我正在通过read/try/fail方法学习,但我无法正确地实现这一点 我会把代码和结果放在这段下面。最后,我想补充一点,我正在使用的伪代码作为实现的参考 函数heapSort(intl) { var l=内部长度, 结束=l-1,
函数heapSort(intl)
{
var l=内部长度,
结束=l-1,
交换
intl=_heapify(intl,l);
而(结束>0)
{
swap=intl[0];
intl[0]=intl[end];
intl[end]=交换;
--结束;
intl=_siftDown(intl,0,end);
}
返回intl;
}
函数_heapify(intl,l)
{
风险值开始=(l-2)/2;
while(开始>=0)
{
intl=\u siftDown(intl,start,l-1);
--开始;
}
返回intl;
}
函数_siftDown(intl、start、end)
{
var root=start,
儿童、交换、交换;
而(root*2+1我发现了两个错误:
在\u heapify
函数中,如果l
不是奇数,则start
变量不是整数:
var start = Math.floor( ( l - 2 ) / 2 );
在\u siftDown
函数中,当您有效地交换数组的2个元素时,您使用了swap
而不是swapr
:
swapr = intl[root]; // <-- Here swapr instead of swap
intl[root] = intl[swap];
intl[swap] = swapr; // <-- Here swapr instead of the 1st occurrence of swap
root = swapr; // <-- Here swapr instead of swap
swapr=intl[root];//我看到了两个错误:
在\u heapify
函数中,如果l
不是奇数,则start
变量不是整数:
var start = Math.floor( ( l - 2 ) / 2 );
在\u siftDown
函数中,当您有效地交换数组的2个元素时,您使用了swap
而不是swapr
:
swapr = intl[root]; // <-- Here swapr instead of swap
intl[root] = intl[swap];
intl[swap] = swapr; // <-- Here swapr instead of the 1st occurrence of swap
root = swapr; // <-- Here swapr instead of swap
swapr=intl[root]//