记录一下堆的两种调整
//小根堆的两种调整#include#include #include #include using namespace std;void adjustUp(int a[],int i){//只能排序a[1,n],插入时使用 if(i==1) return ; while(i!=1){ if(a[i] a[j+1]){ j++; } if(a[i]>a[j]){ swap(a[i],a[j]); i=j; j*=2; }else{ break; } }}int main(){ int n; int a[100]; scanf("%d",&n); for(int i=1;i<=n;i++){ scanf("%d",&a[i]); } for(int i=1;i<=n;i++){ adjustUp(a,i); } for(int i=1;i<=n;i++){ printf("%d ",a[i]); } printf("\n"); swap(a[1],a[n]); adjustDown(a,1,n-1); for(int i=1;i<=n;i++){ printf("%d ",a[i]); } return 0;}/*812 5 78 31 77 64 152 25*/