基本数据结构实现-堆

利用vector实现堆
push,pop,top等基本操作
参考https://chihminh.github.io/2016/08/08/heap-sort/

//
// Created by tao hu on 2020/7/6.
//

#include "vector"
#include "iostream"
using namespace std;
class heap{
 public:
  vector<int> arr_;

  heap(vector<int> &arr){
    if(arr.size()>0){
      for(auto num:arr){
        arr_.push_back(num);
      }
      int index=arr.size();
      for(int i=index-1;i>=0;i--){
        adjust(i);
      }
    }
  }

  virtual ~heap(){

  }


  int adjust(int index){
    //调整为大根堆
    int index_l=index*2;
    int index_r=index*2+1;
    int largetIndex=index;
    if(index_l<arr_.size()&&arr_[largetIndex]<arr_[index_l]){
      largetIndex=index_l;
    }
    if(index_r<arr_.size()&&arr_[largetIndex]<arr_[index_r]){
      largetIndex=index_r;
    }
    if(largetIndex!=index){
      int temp=arr_[index];
      arr_[index]=arr_[largetIndex];
      arr_[largetIndex]=temp;
      adjust(largetIndex);
    }
    return largetIndex;
  }

  int top(){
    if(arr_.size())
      return arr_[0];
    return INT_MIN;
  }
  bool pop(){
    if(arr_.size()){
      arr_[0]=arr_[arr_.size()-1];
      arr_.pop_back();
      return 1;
    }
    else{
      return 0;
    }
  }
  void push(int val){
    arr_.push_back(val);
    int last=arr_.size()/2;
    int cur=last;
    while (last!=(cur=adjust(last))){
      last=cur;
    }
  }
  void print(){
    while(arr_.size()){
      cout<<arr_[0]<<" ";
      arr_[0]=arr_[arr_.size()-1];
      arr_.pop_back();
      adjust(0);
    }
    cout<<endl;
  }
};

int main()
{
  vector<int> arr={1,5,7,2,3,1,12,32,67,4,0,-7,-76};
  auto h=heap(arr);
  h.print();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值