堆排序

以下为代码实现

function heapsort( array ){
    bulidHeap( array );
    for( var i = array.length-1; i >= 0; --i ){
        swap( array, 0, i );
        adjust( array, 0, i );
    }
}

function buildHeap( array ){
    var i = Math.ceil(array.length / 2);
    for( ; i >= 0; --i) {
        adjust( array, i , array.length )
    }
}

function swap( array, i, j ){
    var tmp = array[ i ];
    array[ i ] = array[ j ];
    array[ j ] = tmp;
}

function adjust( array, i , j ){
    var larger = i;
    var left = i * 2 + 1;
    var right = i * 2 + 2;
    if( left < j && array[ left ] > array[ larger ]){
        larger = left;
    }
    if( right < j && array[ right ] > array[ larger ]){
        larger = right;
    }
    if( larger != i ){
        swap( array, larger, i );
        adjust( array, larger , j )

    }
}

var arr = [ 2, 3, 56, 12, 123, 5, 2, 5, 1, 5, 3, 26, 8, 2, 64, 23, 98 ];
heapsort( arr );
原文地址:https://www.cnblogs.com/clearfix/p/4189189.html