堆排序

以下为代码实现

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 );

 

posted @ 2014-12-27 21:09  北京-树苗  阅读(131)  评论(0编辑  收藏  举报