文章

39

粉丝

0

获赞

106

访问

12.6k

头像
堆排序 题解:
P2012 云南大学机试题
发布于2026年3月19日 15:53
阅读数 136

#include <iostream>
#include <vector>

using namespace std;

void 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说明有大的值
        swap(a[i],a[biggest]);
        heapsort(a,biggest,size);//交换后以biggest的节点子树继续向下调整
    }
}

void buildheap(vector<int> &a){
    int n=a.size();
    for(int i=n/2-1;i>=0;i--){//-1
        heapsort(a,i,n);//从最后一个非叶...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发