JavaScript数据结构之 堆排序

以前没学过这种排序,今天看了一下,最好、最坏时间复杂度都是nlog2n。

原理可以参考这篇博客,里面的图不错 http://blog.csdn.net/xiaoxiaoxuewen/article/details/7570621/


JavaScript实现:

/**
 * 对数组中的前n项整理成堆
 * @param array
 * @param n
 */
function refreshHeap(array, n){
    if(array.length=0;i--){
        //对于有子节点的节点i,2*i+1表示的是其第一个子节点,即左子节点
        //这个while是判断当前节点与其子节点是否需要调整
        while(2*i+10){
        //刷新堆之后,将array[0](最大值)与最后一个子节点交换
        //然后重新刷新堆(不包括最后那些排好序的节点了)
        refreshHeap(array, n--);
        let tmp = array[n];
        array[n] = array[0];
        array[0] = tmp;
    }
    return array;
}

var a = [16,7,3,20,17,8];
HeapSort(a,a.length);
console.log(a);

输出:

[ 3, 7, 8, 16, 17, 20 ]

你可能感兴趣的:(js)