文章

39

粉丝

0

获赞

106

访问

9.9k

头像
堆的判断 题解:
P1127
发布于2026年3月19日 16:09
阅读数 49

遍历判断到n/2-1个非叶子节点的关系

 

#include <iostream>
#include <vector>

using namespace std;

bool heapsort(vector<int> &a,int i,int size){
    int left=2*i+1;
    int right=2*i+2;
    int biggest=i;//i不变作为交换的根节点,biggest作为和左右孩子比较大小找到最大的值的索引
    if(left<size&&a[left]<a[biggest]){
        biggest=left;
    }
    if(right<size&&a[right]<a[biggest]){
        biggest=right;
    }
    if(biggest!=i){//不等于i说明有大的值
        return false;
    }
    return true;
}

void buildheap(vector<int> &a){
    int n=a.size();
    for(int i=n/2-1;i>=0;i--){//-1
        heapsort(a,i,n);//从最后一个非叶子节点的位置开始调整子树,否则没有子树意义
 &nb...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发