堆排序(删除最大元素实现

xiaoxiao2025-10-06  19

堆排序(删除最大元素实现)

#include<iostream> using namespace std; int h[1000],n; void swap(int a,int b) { int t; t=h[a]; h[a]=h[b]; h[b]=t; return ; } void siftdown(int i) { int t,flag=0; while(i*2<=n&&flag==0) { if(h[i]>h[2*i]) { t=2*i; }else{ t=i; } if(2*i+1<=n) { if(h[t]>h[2*i+1]) { t=2*i+1; } } if(t!=i) { swap(t,i); i=t; }else flag=1; } return; } void creat(){ int i; for(i=n/2;i>=1;i--) { siftdown(i); } return; } int deletenum() { int t; t=h[1]; h[1]=h[n]; n--; siftdown(1); return t; } int main(){ int num; cin>>num; for(int i=1;i<=num;i++) { cin>>h[i]; } n=num; creat(); for(int i=1;i<=num;i++) { cout<<deletenum()<<" "; } return 0; } 输入输出1499 5 36 7 22 17 46 12 2 19 25 28 1 321 2 5 7 12 17 19 22 25 28 36 46 92 99
转载请注明原文地址: https://www.6miu.com/read-5037441.html

最新回复(0)