Javascript Heapsort算法,将最小元素放在末尾

Javascript Heapsort算法,将最小元素放在末尾,javascript,algorithm,heapsort,Javascript,Algorithm,Heapsort,为了便于培训,我用javascript实现了一组排序算法。除了heapsort之外,我的实现已经成功地对整数和单字符串数组进行了排序 我的实现正确地对数组进行排序,除了在返回排序后的数组时将最小的数字放在末尾 我不是计算机科学专业的学生/毕业生,也没有很多编程背景。我正在通过read/try/fail方法学习,但我无法正确地实现这一点 我会把代码和结果放在这段下面。最后,我想补充一点,我正在使用的伪代码作为实现的参考 函数heapSort(intl) { var l=内部长度, 结束=l-1,

为了便于培训,我用javascript实现了一组排序算法。除了heapsort之外,我的实现已经成功地对整数和单字符串数组进行了排序

我的实现正确地对数组进行排序,除了在返回排序后的数组时将最小的数字放在末尾

我不是计算机科学专业的学生/毕业生,也没有很多编程背景。我正在通过read/try/fail方法学习,但我无法正确地实现这一点

我会把代码和结果放在这段下面。最后,我想补充一点,我正在使用的伪代码作为实现的参考

函数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]//