堆排序,网上还弄了些不错的网站,下面推荐一个:

 
  1. #include <iostream>  
  2. #include <stdlib.h>  
  3. #include <time.h>  
  4. using namespace std;  
  5.  
  6. int g_nCases = 0;  
  7.  
  8. template<typename T>  
  9. void shitHeap(T array[], int const nIndex, int const nSize)  
  10. {  
  11.     T tempData = array[nIndex];  
  12.     // left child  
  13.     int nChild = nIndex *2;  
  14.     while(nChild <nSize){  
  15.         if(array[nChild]<array[nChild+1]){  
  16.             nChild++;  
  17.         }  
  18.         if(tempData >=array[nChild])  
  19.             break;  
  20.         // 大者上移   
  21.         array[nChild/2] = array[nChild];  
  22.         nChild *= 2;  
  23.     }  
  24.     array[nChild/2] = tempData;  
  25. }  
  26.  
  27.  
  28. template<typename T>  
  29. void heapSort(T array[], int const n)  
  30. {  
  31.     // make a heap  
  32.     // 从最后一个分支节点开始   
  33.     for(int m = n/2; m>=0; m--){  
  34.         shitHeap(array, m, n);    
  35.     }  
  36.     // out--让大的放到后面去   
  37.     for(int m = n-1; m>=0; m--){  
  38.         swap(array[0], array[m]);  
  39.         shitHeap(array, 0, m-1);      
  40.     }  
  41. }  
  42.  
  43. template<class T>  
  44. void  printArray(T array[], int const n)  
  45. {  
  46.       cout<<"Case "<<g_nCases++<<" :"<<endl;  
  47.       for(int i=0; i<n; i++)  
  48.           cout<<array[i]<<", ";  
  49.       cout<<endl;     
  50. }  
  51.  
  52. int main(int argc, char *argv[])  
  53. {  
  54.     srand((unsigned)time(NULL));  
  55.       
  56.     const int N = 1000;  
  57.     int array[N];  
  58.     // Init  
  59.     for(int i=0; i<N; i++){  
  60.         array[i] = rand()%N;      
  61.     }  
  62.       
  63.     printArray(array, N);  
  64.     heapSort(array,N);  
  65.     printArray(array, N);  
  66.       
  67.     return 0;