堆
#include <iostream> using namespace std; int parent(int i) { return i/2; } int left(int i) { return 2*i; } int right(int i) { return 2*i+1; } int MAX_HEAPIFY(int a[],int i,int n) { int l,r,largest; l=left(i); r=right(i); if(l<=n&&a[l]>a[i]) largest=l; else largest=i; if(r<=n&&a[r]>a[largest]) largest=r; if(largest!=i) { int tmp; tmp=a[largest]; a[largest]=a[i]; a[i]=tmp; return MAX_HEAPIFY(a,largest,n); } return 0; } int BUILD_MAX_HEAP(int a[],int n) { for(int i=n/2;i>=1;i--) MAX_HEAPIFY(a,i,n); return 0; } int HEAPSORT(int a[],int n) { BUILD_MAX_HEAP(a,n); for(int i=n;i>=2;i--) { int tmp; tmp=a[1]; a[1]=a[i]; a[i]=tmp; n--; MAX_HEAPIFY(a,1,n); } return 0; } int main() { int data[20],n; cin>>n; for(int i=1;i<=n;i++) cin>>data[i]; HEAPSORT(data,n); for(int i=1;i<=n;i++) cout<<data[i]<<" "; cout<<endl; return 0; }
你若是天才,我便是疯子