堆排序
#include<iostream> #include<algorithm> #include<ctime> #include<cstdlib> using namespace std; void maxHeap(int *a,int n,int i){ int left=i<<1,right=i<<1|1; if(left > n) return; int large=left; if(right <= n && a[right] > a[large]) large=right; if(a[i] < a[large]) swap(a[i],a[large]); maxHeap(a,n,large); } void makeHeap(int * a,int n){ int i; for(i=n/2;i>=1;i--){ maxHeap(a,n,i); } } void sortHeap(int * a,int n){ int i; for(i=n;i>=2;i--){ swap(a[i],a[1]); maxHeap(a,i-1,1); } } int main(){ srand(time(NULL)); int i,a[11]; for(i=1;i<=10;i++){ a[i]=rand()%20; } makeHeap(a,10); sortHeap(a,10); for(i=1;i<=10;i++){ cout<<a[i]<<' '; } cout<<endl; //////////////////// for(i=1;i<=10;i++){ a[i]=rand()%20; } make_heap(a+1,a+11); sort_heap(a+1,a+11); for(i=1;i<=10;i++){ cout<<a[i]<<' '; } cout<<endl; return 0; }