堆排序的實現

  1. #include<iostream> 
  2. #include<string> 
  3. using namespace std; 
  4.  
  5. static size_t heap_size=0; 
  6. inline size_t left(size_t i) 
  7.     return 2*i; 
  8. inline size_t right(size_t i) 
  9.     return 2*i+1; 
  10. inline size_t parent(size_t i){return i>>1;} 
  11. template<class Type> 
  12. void max_heap(Type A[],size_t pos) 
  13.     size_t largest=pos; 
  14.     Type  temp; 
  15.     size_t l=left(pos) ,r=right(pos); 
  16.     if(l<=heap_size) 
  17.      { 
  18.      if(A[l]>A[pos]) 
  19.         largest=l; 
  20.         /*else  
  21.         largest=pos;*/ 
  22.     } 
  23.     if(r<=heap_size&&A[r]>A[largest]) 
  24.         largest=r; 
  25.  
  26.     if(largest!=pos) 
  27.     { 
  28.         temp=A[largest]; 
  29.         A[largest]=A[pos]; 
  30.         A[pos]=temp;   
  31.         //cout<<"A["<<pos<<"]="<<A[pos]<<endl; 
  32.         max_heap(A,largest); 
  33.     } 
  34.      
  35.  
  36.  
  37. template<class Type> 
  38. void build_heap(Type A[],size_t A_size) 
  39.     heap_size=A_size; 
  40.     for(size_t i=A_size/2;i>=1;--i) 
  41.     {    
  42.         max_heap<Type>(A,i); 
  43.     } 
  44.  
  45.  
  46. template<class Type> 
  47. void heap_sort(Type A[],size_t A_size) 
  48.         Type temp; 
  49.         build_heap<Type>(A,A_size); 
  50.         /*  for(int i=1;i!=10;++i) 
  51.               cout<<A[i]<<"  ";*/ 
  52.          
  53.     for(size_t i=A_size;i>=1;--i ) 
  54.     { 
  55.          
  56.                temp=A[1]; 
  57.                A[1]=A[i]; 
  58.                A[i]=temp; 
  59.               --heap_size; 
  60.               max_heap<Type>(A,1); 
  61.  
  62.     } 
  63.  
  64. int main() 
  65.     int A[]={5,54,8,64,23,64,56,24,12,46}; 
  66.     heap_sort<int>(A,9); 
  67.      
  68.     for(int i=1;i!=10;++i) 
  69.         cout<<A[i]<<endl; 
  70.     return 0; 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章