当前位置:编程学习 > C/C++ >>

堆排序算法

[cpp]
/*
  Name: 
  Copyright: 
  Author: 
  Date: 18-06-11 20:51
  Description: 实现堆排序的模版类 ,元素从1开始计.T为要排序的元素类型,
               [note:]必须支持 <= 运算 和 赋值运算 
*/ 
#include<iostream>  
#include<iomanip>  
using namespace std; 
 
template<typename T> 
class heap 

public: 
     typedef unsigned UINT; 
      // n 代表要排序的n个元素,要分配n+1个空间,元素位置从1开始计   
      heap(const UINT n) 
      { 
         _count = n; 
         _pA = new T[n + 1]; 
      } 
      ~heap() 
      { 
         _count = 0; 
         if(_pA) 
         { 
            delete[] _pA; 
            _pA = NULL; 
         } 
      } 
      void heapsort(); 
private: 
      void maxheap_shift(const UINT i,const UINT size); 
      void buildheap(); 
public: 
      T *_pA; 
private: 
      UINT _count; 
}; 
template<class T> 
void heap<T>::maxheap_shift(const UINT i,const UINT size) 

     UINT j=2*i; 
     if(j <= size) 
     { 
         if(_pA[j] <= _pA[i]) 
            j=i; 
         if(2*i+1<=size) 
         { 
            if(_pA[j] < _pA[2*i+1]) 
                j=2*i+1; 
         } 
     } 
     else  
     { 
        return; 
     } 
     if(j!=i) 
     { 
         T temp; 
         temp = _pA[i]; 
         _pA[i] = _pA[j]; 
         _pA[j] = temp; 
         maxheap_shift(j,size); 
     } 

 
template<typename T> 
void heap<T>::buildheap() 

     for(UINT i= _count/2 ;i >= 1;--i) 
     { 
         maxheap_shift(i,_count); 
     } 

template<class T> 
void heap<T>::heapsort() 

     buildheap(); 
     T tem; 
     for(UINT i = _count;i > 1;--i) 
     { 
         tem = _pA[1]; 
         _pA[1] = _pA[i]; 
         _pA[i] = tem; 
         maxheap_shift(1,i-1); 
     } 

int main() 

    //count 表示要排序的元素个数   
    heap<double>::UINT count = 30; 
    heap<double>::UINT i; 
     
    heap<double> myheap(count); 
    if(!myheap._pA) 
    { 
        cout<<"分配失败"<<endl; 
        goto RETURN;  
    } 
      
    for(i=1;i<=count;++i) 
    { 
       myheap._pA[i] = (double)(count-i) - 0.2; 
    } 
      for(i=1;i<=count;++i) 
    { 
       cout<<myheap._pA[i]<<" "; 
    } 
    cout<<'\n';  
     
    myheap.heapsort(); 
    for(i=1;i<=count;++i) 
    { 
       cout<<myheap._pA[i]<<" "; 
    } 
     
RETURN:  
    system("pause"); 
    return 0; 

/*
  Name:
  Copyright:
  Author:
  Date: 18-06-11 20:51
  Description: 实现堆排序的模版类 ,元素从1开始计.T为要排序的元素类型,
               [note:]必须支持 <= 运算 和 赋值运算
*/
#include<iostream>
#include<iomanip>
using namespace std;

template<typename T>
class heap
{
public:
     typedef unsigned UINT;
      // n 代表要排序的n个元素,要分配n+1个空间,元素位置从1开始计
      heap(const UINT n)
      {
         _count = n;
         _pA = new T[n + 1];
      }
      ~heap()
      {
         _count = 0;
         if(_pA)
         {
            delete[] _pA;
            _pA = NULL;
         }
      }
      void heapsort();
private:
      void maxheap_shift(const UINT i,const UINT size);
   &nb

补充:软件开发 , C++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,