堆调整算法-直接将数组转成最大最小堆

直接将数组调整成最大或者最小堆


@heapsort
begin():
1.将数组转成堆heapify();
2.移出根结点的值,然后把最后一个元素移动到根节点处;
3.while(len>0)
调整堆heapify();
转2;
end();


堆化算法:最小堆

void heapify(vector arr) {
    int len = arr.size();
    for (int k = (len - 1) / 2; k >= 0; k--) //从距离叶子最近的节点开始
    {
        while (k * 2 + 1 < len) 
        {
            int son = k * 2 + 1;        // A[i] 的左儿子下标
            if (k * 2 + 2 < len&& arr[son] > arr[k * 2 + 2]) {//如果有右儿子子并且左儿子大于右耳子
                son = k * 2 + 2;        // 选择两个儿子中较小的
            }
            if (arr[son] > arr[k]) {
                break;
            }//左右儿子都大于父节点,退出while循环,否则交换
            int temp = arr[son];
            arr[son] = arr[k];
            arr[k] = temp;
            k = son;//调换之后,son作为父节点的情况
        }
    }
    
}

你可能感兴趣的:(堆调整算法-直接将数组转成最大最小堆)