#include <iostream>
#include <algorithm>
#include <cstring>
#include<string>
#include<vector>
#include<cmath>
#include<stack>
#include<queue>
using namespace std;
#define Max 10
int a[Max]={7,20,25,13,30,5,7,9};
int n=7;
void adjust_heap(int *a,int x,int m){
//for(int i=x;i<=m;)
int i=x;
while(i<=m){
if(2*i>m) break;
if(2*i==m){
if(a[2*i]<a[i]){
int temp=a[i];
a[i]=a[2*i];
a[2*i]=temp;
i=2*i;
}
else{
break;
}
}
if(2*i<m){
if(a[2*i]>a[2*i+1]){
if(a[2*i+1]<a[i]){
int temp=a[i];
a[i]=a[2*i+1];
a[2*i+1]=temp;
i=2*i+1;
}
else break;
}
else if(a[2*i]<a[2*i+1]){
if(a[2*i]<a[i]){
int temp=a[i];
a[i]=a[2*i];
a[2*i]=temp;
i=2*i;
}
else{
break;
}
}
}
}
}
void show_heap(int *a){
for(int i=1;i<=n;i++){
cout<<a[i]<<" ";
}
}
void creat_heap(int *a){
n=7;
for(int i=n/2;i>=1;i--){
adjust_heap(a,i,n);
}
}
int deleteMax(int *a){
int t=a[1];
a[1]=a[n];
n--;
for(int i=2;i<=n;i*=2){
if(i<n&&a[i]>a[i+1]){
i++;
}
if(a[i/2]>a[i]){
int temp=a[i/2];
a[i/2]=a[i];
a[i]=temp;
}
else break;
}
return t;
}
void MaxHeapInsert(int* a,int x){
n++;
a[n]=x;
for(int i=n;i>0;i/=2){
if(a[i]<a[i/2]&&i/2>0){
int temp=a[i/2];
a[i/2]=a[i];
a[i]=temp;
}
else break;
}
}
int main(){
show_heap(a);
cout<<endl;
creat_heap(a);
show_heap(a);
cout<<endl;
int t= deleteMax(a);
show_heap(a);
cout<<endl;
MaxHeapInsert(a,8);
show_heap(a);
cout<<endl;
}
最小堆的创建,删除,增加(mycode)
最新推荐文章于 2021-11-20 16:45:24 发布