#include<iostream> using namespace std; #define MAX 100 int a[MAX]={1,2,3,4,5,6,7,8}; // void sitf_up(int *A,int i){ bool done=false; if(i!=1){ while(!done && i!=1){ if(A[i]>A[i/2])swap(A[i],A[i/2]); else done=true; i=i/2; } } } void sitf_down(int *A,int n,int i){ bool done=false; if(2*i<=n){ i=2*i; while(!done && i<=n){ if(i+1<=n &&A[i]<A[i+1])i=i+1; if(A[i]>A[i/2])swap(A[i],A[i/2]); else done=true; i=2*i; } } } void delete_element(int *A,int &n,int i) { int x=A[i],y=A[n]; n--; if(i<=n){ A[i]=y; if(y>=x)sitf_up(A,i); else sitf_down(A,n,i); } } void insert(int *A,int &n,int x){ n=n+1; A[n]=x; sitf_up(A,n); } void delete_max(int *A,int &n,int i){ } void print(int n){ for(int i=1;i<=n;++i) cout<<a[i]<<" "; cout<<"/n--------------------/n"; } void make_heap(int *A,int n){ A[n]=A[0]; print(n); for(int i=n/2;i>=1;--i){ sitf_down(A,n,i); print(n); } } void heap_sort(int *A,int n){ int length=1; make_heap(A,n); for(int i=n;i>1;--i){ swap(A[i],A[1]); sitf_down(A,i-1,1); } } int main(int argc, char *argv[]) { int n=8; heap_sort(a,n); print(n); return 0; }