void adjustHeap (int *pArray, int rootIndex, int heapSize) { int minIndex = rootIndex; int leftIndex = 2 * rootIndex + 1; int rightIndex = 2 * (rootIndex + 1); if ((leftIndex < heapSize) && (rightIndex < heapSize) && (pArray[leftIndex] < pArray[rightIndex]) && (pArray[leftIndex] < pArray[rootIndex])) { minIndex = leftIndex; } if ((leftIndex < heapSize) && (rightIndex >= heapSize) && (pArray[leftIndex] < pArray[rootIndex])) { minIndex = leftIndex; } if ((rightIndex < heapSize) && (pArray[rightIndex] < pArray[leftIndex]) && (pArray[rightIndex] < pArray[rootIndex])) { minIndex = rightIndex; } if (minIndex != rootIndex) { swap(&pArray[rootIndex], &pArray[minIndex]); adjustHeap(pArray, minIndex, heapSize); } }
时间: 2023-06-20 20:05:08 浏览: 118
C++实现的求解多元一次方程示例
这是一个用于调整堆的函数,主要作用是将指定节点下沉到正确的位置,以保证堆的性质。具体来说,该函数会比较指定节点与其左右子节点的值,找出其中最小的那个节点,并将其与指定节点交换位置。然后,递归调用该函数,以确保交换后的节点仍然满足堆的性质。这个函数的时间复杂度为 O(log n),其中 n 是堆中元素的数量。
阅读全文