zoukankan      html  css  js  c++  java
  • 堆实例

    #include <iostream>
    using namespace std;
    class A
    {
     public:
         A(int *data, int len){}
     };
     
    template<class T> class MaxHeap{
      private:
         T *datas;
         int MaxSize;
         int currentSize;
         void KeepHeap(int root);
         bool del;
      public:
         MaxHeap(int MaxSize);
         MaxHeap(T *datas, int length);
         ~MaxHeap();
         bool Insert(T data);
         T GetMax();
         void RemoveMax();
         void PrintHeap(){
             for (int i=1; i<=currentSize; i++)
             {
                 cout << datas[i] << "   ";
             }
             cout << endl;
         }
         int GetCurrentSize()
         {
             return currentSize;
         }
         //void BuildMaxHeap(T *datas);
      };
     
     template <class T> MaxHeap<T>::MaxHeap(T *datas, int length)
     {
         this->datas = datas;
         currentSize = length;
         MaxSize = currentSize;
         for (int i=currentSize/2; i>0; i--)
         {
             KeepHeap(i);
         }
         del = false;
     }
     
     template<class T> MaxHeap<T>::MaxHeap(int MaxSize)
     {
         this->MaxSize = MaxSize;
         datas = new T[this->MaxSize+1];
         this->currentSize = 0;
         del = true;
     }
     
     template<class T> MaxHeap<T>::~MaxHeap()
     {
         if(del)
             delete []datas;
     }
     
     template<class T> bool  MaxHeap<T>::Insert(T data)
     {
         if (currentSize+1 > MaxSize)
         {
             return false;
         }
         datas[++currentSize] = data;
         int index = currentSize;
         int temp = (index)/2;
         while (temp>=1)
         {
             if (datas[temp]<data)
             {
                 datas[index] = datas[temp];
                 index = temp;
                 temp = temp/2;
             }else{
                 break;
             }
         }
         datas[index] = data;
         return true;
     }
     
     template<class T> T MaxHeap<T>::GetMax()
     {
         return datas[1];
     }
     
     template<class T> void MaxHeap<T>::KeepHeap(int root)
     {
         int temp = datas[root];
         while (root*2<=currentSize)
         {
             int child = root*2;
             if (child+1<=currentSize && datas[child] < datas[child+1])
             {
                 child++;
             }
             if (temp > datas[child])
             {
                 break;
             }else
             {
                 datas[root] = datas[child];
             }
             root = child;
         }
         datas[root] = temp;
     }
     
     template<class T> void MaxHeap<T>::RemoveMax()
     {
         int temp = datas[1];
         datas[1] = datas[currentSize];
         datas[currentSize] = temp;
         currentSize--;
         KeepHeap(1);
     }
     void MinK(int *data, int length, int k)
     {
         MaxHeap<int> heap(length);
         for (int i=1; i<length; i++)
         {
             if (k>heap.GetCurrentSize())
             {
                 heap.Insert(data[i]);
             }else{
                 if (data[i]<heap.GetMax())
                 {
                     heap.RemoveMax();
                     heap.Insert(data[i]);
                 }
             }
         }
         heap.PrintHeap();
     }
     
     int main(int argc, char* argv[])
     {
     //     MaxHeap<int> h(4);
     //     h.Insert(1);
     //     h.Insert(2);
     //     h.Insert(3);
         int data[] = {-1,15,24,3,8,7,6,5,7};
         int len = sizeof(data)/sizeof(int);
         MaxHeap<int> h(data, len-1);
         for (int i=1; i<len; i++)
         {
             h.RemoveMax();
         }
         for (i=1; i<len; i++)
             cout << data[i] << " ";
         cout << endl;
     
         MinK(data,len,3);
         return 0;
     }
  • 相关阅读:
    Prometheus实现微信邮件钉钉报警
    产品需求文档和原型
    各类数据集
    redis与mysql数据同步
    hadoop hbase hive spark对应版本
    Redis集群的搭建
    mysql数据库数据与redis同步
    企业级Zabbix监控实战(一)
    mysql实现高可用架构之MHA
    04-爬取单个英雄联盟英雄的符文图片
  • 原文地址:https://www.cnblogs.com/xing901022/p/2762695.html
Copyright © 2011-2022 走看看