最关键的函数:
1 inline void swap(int *arr,int i,int j) 2 { 3 if(i==j) 4 return; 5 arr[i]=arr[i]^arr[j]; 6 arr[j]=arr[i]^arr[j]; 7 arr[i]=arr[i]^arr[j]; 8 } 9 10 void siftup(int *heap,int n) 11 { 12 /*1..n-1 is a heap*/ 13 for(int i=n,p;i>1&&heap[p=i/2]<heap[i];i=p) 14 swap(heap,i,p); 15 } 16 17 void siftdown(int *heap,int n) 18 { 19 /*2..n is a heap*/ 20 for(int i=1,c;(c=i*2)<=n;i=c) 21 { 22 if(c+1<=n) 23 if(heap[c+1]>heap[c]) 24 ++c; 25 if(heap[i]>=heap[c]) 26 break; 27 swap(heap,i,c); 28 } 29 }
堆排序代码和测试程序:
1 void heapSort(int *arr,int n) 2 { 3 for(int i=2;i<=n;++i) 4 siftup(arr,i); 5 for(int i=n;i>=2;--i) 6 { 7 swap(arr,i,1); 8 siftdown(arr,i-1); 9 } 10 }
1 int main() 2 { 3 int arr[11]; 4 srand(time(NULL)); 5 for(int i=1;i<11;++i) 6 { 7 arr[i]=rand()%100; 8 } 9 heapSort(arr,10); 10 for(int i=1;i<11;++i) 11 cout<<arr[i]<<" "; 12 cout<<endl; 13 return 0; 14 }