向下调整建小根堆的代码
时间: 2024-04-14 08:21:11 浏览: 33
libevent 最小根堆
向下调整建小根堆的代码可以按照以下步骤进行:
1. 定义一个函数downAdjust,接受三个参数:数组arr、待调整的节点index、堆的大小size。
2. 判断当前节点index是否为叶子节点(即index * 2 + 1是否大于等于size),如果是,则直接返回。
3. 初始化变量minIndex为index,用于记录当前节点、左子节点和右子节点中值最小的节点的索引。
4. 分别比较当前节点和左子节点arr[index * 2 + 1],如果左子节点小于当前节点,则更新minIndex为左子节点的索引。
5. 如果右子节点arr[index * 2 + 2]存在且小于arr[minIndex],则更新minIndex为右子节点的索引。
6. 如果minIndex不等于index,则交换当前节点arr[index]和值最小节点arr[minIndex]的值,并递归调用downAdjust函数,将minIndex作为下一轮调整的节点。
7. 调用downAdjust函数,从堆的根节点开始进行向下调整。
代码示例:
```
void downAdjust(int arr[], int index, int size) {
int minIndex = index; int leftChild = index * 2 + 1;
int rightChild = index * 2 + 2;
if (leftChild < size && arr[leftChild] < arr[minIndex]) {
minIndex = leftChild;
}
if (rightChild < size && arr[rightChild] < arr[minIndex]) {
minIndex = rightChild;
}
if (minIndex != index) {
swap(arr[index], arr[minIndex]);
downAdjust(arr, minIndex, size);
}
}
```
阅读全文