数据结构与算法之堆与堆排序
在数据结构中,堆其实就是一棵完全二叉树。我们知道内存中也有一块叫做堆的存储区域,但是这与数据结构中的堆是完全不同的概念。在数据结构中,堆分为大根堆和小根堆,大根堆就是根结点的关键字大于等于任一个子节点的关键字,而它的左右子树又分别都是大根堆;小根堆与大根堆恰好相反。在C++的STL中优先队列priority_queue结构就是实现的堆结构。下来自己动手现实一个堆结构,包括heap_init,heap_insert,heap_top等操作。1、堆的实现 因为堆是一棵完全二叉树,所以我们可以用顺序表来实现,而且堆也只能用顺序表。我们用vector。 (1) 堆的初始化 对堆的初始化基本思想:首先初始数组是一个杂乱无章的序列,但是如果堆中只有一个元素heap[0],那么heap[0]本身是一个堆,然后加入heap[1]调整堆;继续加入heap[2].....直到完成所有元素的调整。
谈谈年度最佳代码
围绕这段代码也产生了一些讨论(如代码风格,编程规范等等),在此顺手记录一下,就当无聊罢。 这段代码是这样的:try{ if (you.believe(it) == true || you.believe(it) == false) { I.believe(it); }}catch (Exception ex){ throw new Exception("It\'s a miracle!");}finally{ it.justHappened();}