东北大学

东北大学842——排序的编程题

可紊 提交于 2019-12-01 13:02:54
调整大根堆(只考过一次) 大根堆实际上还是数组 双亲结点,左孩子结点,右孩子结点为一组 先寻找最后的一组 每一次先比较两个孩子谁大 然后较大的孩子与双亲比较 双亲大,就跳到下一组,直到根 孩子大,交换孩子,双亲。 检查受改变的孩子的组有没有变 //根节点为1 void adjust2(int A[], int length, int i) { if(2i >= length) { return; } int maxChildIdx = 2i; if(2i+1 < length && A[2i] > A[2i+1]) { maxChildIdx = 2i+1; } if(A[i] >= A[maxChildIdx]) { return; } if(A[maxChildIdx] > A[i]) { int temp = A[i]; A[i] = A[maxChildIdx]; A[maxChildIdx] = temp; } adjust2(A, length, maxChildIdx); } void adjust1(int A[], int length) { for(int i = length / 2;i > 0; --i) { adjust2(A, length, i); } } 来源: https://www.cnblogs.com/vergilwu/p/11687547