文章
39
粉丝
0
获赞
106
访问
9.9k
#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...
登录后发布评论
暂无评论,来抢沙发