var arr = [49,38,27,97,76,13,65,50];
    function MaxHeap(arr,size,i){
        //左子节点
        var left = i*2+1;
        //右子节点
        var right = i*2+2;
        //假设这个根节点为最大
        var max = i
        //如果左子树的节点大于根节点则将max赋值
        if(left<size && arr[left]>arr[max]){
            max = left
        }
        //如果右子树的节点大于根节点则将max赋值
        if(right<size && arr[right]>arr[max]){
            max = right
        }
        //如果存在比根节点大的值
        if(max !== i){
            var temp = arr[max];
            arr[max] = arr[i];
            arr[i] = temp;
            //调整后子节点可能不是最大堆,需要重新调整
            MaxHeap(arr,size,max)
        }
    }
    function HeapSort(arr) {
        var len = arr.length
        // 从最后一个根节点来调整堆
        var lastIndex = Math.floor((len - 1 - 1) / 2); //寻找倒数第二行的根节点的索引
        for(var i=lastIndex;i>=0;i--){
            MaxHeap(arr,len,i)
        }
        return arr;
    }
    console.log(HeapSort(arr)); //97,76,65,50,49,13,27,38