简易版的堆的写法

个人认为重点写出max_heapify和parent_heapify两个函数即可,这个版本内存管理的功能显得特别简单:

#include<iostream>
#include<stdio.h>

using namespace std;

class Heap {
public:
  int size, capacity;
  int *ele;
  void max_heapify(int i,int heap[],int len){//数组从0开始
    int l,r,largest;
    l=2*i+1;   r=2*i+2;
    if( l<len && heap[l]>heap[i] )
      largest=l;
    else
      largest=i;
    if( r<len && heap[r]>heap[largest] )
      largest=r;
    if(largest!=i){
      swap( heap[largest],heap[i] );
      max_heapify(largest,heap,len);
    }
  }
  void parent_heapify(int i,int heap[],int len){//和parent结点不断交换
    int parent = i / 2;
    while (heap[i] > heap[parent]) {
      swap(heap[i], heap[parent]);
      i = parent, parent = i / 2;
    }
  } 

  Heap(int capacity, int heap[], int len) {
    this->capacity = capacity, this->size = len;
    ele = heap;
    for(int i = size/2-1 ; i >= 0; i--)
      max_heapify(i,ele,size);
  }
  bool push(int val) {
    if (size < capacity) {
      ele[size++] = val;
      parent_heapify(size - 1, ele, size);
      return true;
    }
    else
      return false;
  }
  void pop() {
    swap(ele[0], ele[size--]);
    max_heapify(0, ele, size);
  }
  int top() {
    return ele[0];
  }
};

int main() {
  int a[10] = {1,2,3,4,5,6,7};
  int len = sizeof(a) / sizeof(a[0]);
  Heap heap(10, a, 7);
  heap.pop();
  heap.push(10);

  return 0;
}

简易版的堆的写法

时间: 2024-08-24 14:01:41

简易版的堆的写法的相关文章

使用 LinkedBlockingQueue 实现简易版线程池

前一阵子在做联系人的导入功能,使用POI组件解析Excel文件后获取到联系人列表,校验之后批量导入.单从技术层面来说,导入操作通常情况下是一个比较耗时的操作,而且如果联系人达到几万.几十万级别,必须拆分成为子任务来执行.综上,可以使用线程池来解决问题.技术选型上,没有采用已有的 ThreadPoolExecutor 框架,而使用了自制的简易版线程池.该简易版的线程池,其实也是一个简易版的[生产者-消费者]模型,任务的加入就像是生产的过程,任务的处理就像是消费的过程.我们在这里不去讨论方案的合理性

简易版DES加密和解密详解

在DES密码里,是如何进行加密和解密的呢?这里采用DES的简易版来进行说明. 二进制数据的变换 由于不仅仅是DES密码,在其它的现代密码中也应用了二进制数据,所以无论是文章还是数字,都需要将明文变换为二进制数据,如图表所示,这里仅将使用的16字符(其中含有1个没有意义的空字符),将每个字符都对应不同的4bit的二进制编码进行变换,将明文表示成"0"和"1"的系列 表2.8 表2.9 本文部分参考自漫画密码,此文博主花了几个小时的时间整理,转载请注明http://ww

简易版聊天系统实现 Socket VS NIO两种实现方式

说是简单聊天系统,压根不能算是一个系统,顶多算个雏形.本文重点不在聊天系统设计和实现上,而是通过实现类似效果,展示下NIO 和Socket两种编程方式的差异性.说是Socket与NIO的编程方式,不太严谨,因为NIO的底层也是通过Socket实现的,但又想不出非常好的题目,就这样吧. 主要内容 Socket方式实现简易聊天效果 NIO方式实现简易聊天效果 两种方式的性能对比 前言 预期效果,是客户端之间进行"广播"式聊天,类似于QQ群聊天.希望以后有机会,以此简易版为基础,不断演进,演

杭电2083(简易版之最短距离)

简易版之最短距离 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 2   Accepted Submission(s) : 2 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 寒假的时候,ACBOY要去拜访很多朋友,恰巧他所有朋友的家都

Android学习之路——简易版微信为例(三)

最近好久没有更新博文,一则是因为公司最近比较忙,另外自己在Android学习过程和简易版微信的开发过程中碰到了一些绊脚石,所以最近一直在学习充电中.下面来列举一下自己所走过的弯路: (1)本来打算前端(即客户端)和后端(即服务端)都由自己实现,后来发现服务端已经有成熟的程序可以使用,如基于XMPP协议的OpenFire服务器程序:客户端也已经有成熟的框架供我们使用,如Smack,同样基于XMPP协议.这一系列笔记式文章主要是记录自己学习Android开发的过程,为突出重点(Android的学习)

HDU 2083 简易版之最短距离 --- 水题

HDU 2083 简易版之最短距离 /* HDU 2083 简易版之最短距离 */ #include <cstdio> #include <algorithm> using namespace std; const int maxn = 505; int a[maxn]; int main() { #ifdef _LOCAL freopen("D:\\input.txt", "r", stdin); #endif int t; scanf(&

WINDOWS 7简易版截图

以前没玩过简易版,就利用虚拟机安装一个看看,注意这个版本只有32位版本. 计算机的基本信息 简易版进行设置 目前不再支持升级 用户管理只能通过命令行,有点LINUX的味道吧

简易版推箱子问题

            房间是N行N列的矩阵,其中0代表空的地板,1代表墙,2代表箱子的起始位置,3代表箱子要被推去的位置,4代表搬运工的起始位置,求最后搬运工推箱子的步数.   问题实质就是五个状态:箱子的位置(bx,by),人的位置(px,py),推箱子的步数.然后用广搜去一一搜索. #include <iostream> #include <queue> #include <cstring> using namespace std; struct Node { i

简易版的TimSort排序算法

欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. 简易版本TimSort排序算法原理与实现 TimSort排序算法是Python和Java针对对象数组的默认排序算法.TimSort排序算法的本质是归并排序算法,只是在归并排序算法上进行了大量的优化.对于日常生活中我们需要排序的数据通常不是完全随机的,而是部分有序的,或者部分逆序的,所以TimSort充分利用已有序的部分进行归并排序.现在我们提供一个简易版本TimSort排序算法,它