排序 一、插入排序 1、插入排序的算法 2、考点归纳 1)折半插入排序和直接插入排序异同点 不同点:折半插入排序元素比较次数少于直接插入排序 相同点:折半插入排序的平均移动元素次数与直接插入排序一致 注意:一个算法的时间复杂度,与所需要比较的关键字次数、需要移动的记录数量都有关, 2)直接插入排序 ...
分类:
编程语言 时间:
2017-09-03 15:40:47
阅读次数:
225
代码如下: 说明: 上面堆排序的关键在于buildMaxHeap()方法。该方法用于对data数组从0到lastindex索引范围内的元素建大顶堆,这样就选择出数组索引从0到lastindex范围内的最大元素。采用循环不断重复上面过程即可完成堆排序。 对于堆排序算法而言,假设有n项数据,需要进行n- ...
分类:
编程语言 时间:
2017-08-19 20:03:40
阅读次数:
182
堆排序是一种选择排序,其时间复杂度为O(nlogn)。 堆的定义 n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中 ...
分类:
编程语言 时间:
2017-08-17 12:43:58
阅读次数:
172
* 定时器的应用与原理: 游戏中。活动的状态、游戏数据的保存与载入、BOSS刷新时间等等,都可能会用到定时器。而堆对于定时器的实现有着至关关键的数据。 定时器的工作原理事实上不难,就是内部保存多个时间及其回调函数。当系统时间达到我们保存的时间值时,就运行回调函数。从而达到定时工作的效果。同一时候,推 ...
分类:
其他好文 时间:
2017-07-25 13:38:35
阅读次数:
90
关于二叉树有一点需要注意:二叉树并不是树的一种特殊形式。 二叉树又有几种特殊的形式:二叉排序树(二叉查找树)、最优二叉树(哈弗曼树)、二叉堆(大顶堆,小顶堆)等。斜线是数据结构 二叉排序树(二叉查找树)(BST)它或者是一棵空树;或者是具有下列性质的二叉树:(常用二分查找) 1,若左子树不空,则左子 ...
分类:
其他好文 时间:
2017-07-01 23:22:32
阅读次数:
448
【算法】数学 【题解】 1.平均数:累加前缀和。//听说要向下取整? 2.中位数:双堆法,大于中位数存入小顶堆,小于中位数存入大顶堆,保证小顶堆内数字数量≥大顶堆,奇数则取小堆顶,偶数则取两堆顶/2。 3.方差=(平方的均值)-(均值的平方),即对于a,b,c,s2=(a2+b2+c2)/3-((a ...
分类:
编程语言 时间:
2017-06-20 14:47:37
阅读次数:
201
本文假设你已对堆排序的算法有主要的了解。 要分析stl中heap的源代码的独到之处。最好的办法就是拿普通的代码进行比較。话不多说,先看一段普通的堆排序的代码: //调整大顶堆。使得结构合理 void max_heap(int a[],int node,int size) { int lg=node; ...
分类:
其他好文 时间:
2017-06-15 20:30:39
阅读次数:
240
春蚕到死丝方尽,蜡炬成灰泪始干 ——无题 这里介绍两个比较难的算法: 1、堆排序 2、分治并归排序 先说堆。 这里请大家先自行了解完全二叉树的数据结构。 堆是完全二叉树。大顶堆是在堆中,任意双亲值都大于(或等于)其孩子值,就称其为大顶堆。 堆排序的步骤: 1、把数组想象成一个堆。数组的index+1 ...
分类:
编程语言 时间:
2017-05-12 20:21:21
阅读次数:
229
有时间再贴算法分析图 JDK7的Collections.sort()的算法是TimSort, 适应性的归并排序, 比较晦涩难懂, 这里没有实现 ...
分类:
编程语言 时间:
2017-04-09 18:46:47
阅读次数:
252
堆简介 堆并不是STL的组件,但是经常充当着底层实现结构。比如优先级队列(Priority Queue)等等。 堆是一种完全二叉树,因此我们可以用数组来存储所有节点。在这里的实现中,采用了一个技巧:将数组中索引为0的元素保留,设置为极大值或者为极小值(依据大顶堆或者小顶堆而定)。那么当某个节点的索引 ...
分类:
编程语言 时间:
2017-04-09 18:02:30
阅读次数:
225