文章
39
粉丝
0
获赞
106
访问
10.4k
#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);//从最后一个非叶...
登录后发布评论
暂无评论,来抢沙发