冒泡排序,感觉是最简单的排序: 基本思路:每次把数组中最小的一个元素像气泡一样浮动、固定到最顶端: 从前向后遍历数组,每次拿到一个元素,就执行一遍冒泡: 从数组末尾开始,到当前元素截止,从后向前遍历,每次比较数组中相邻的两个元素,如果后者比较小,就把两者互换。 这样经过第一次冒泡,可以把最小的元素『 ...
分类:
编程语言 时间:
2016-12-04 19:53:29
阅读次数:
270
堆结构简述了解过数据结构的人,应该对堆结构不陌生,堆的底层是使用数组来实现的,但却保持了二叉树的特性。堆分为两种,最大堆和最小堆,以最大堆为例,最大堆保持了根结点大于两个左右两个孩子,同时所有子树一次类推。由于堆底层是数组结构,这里从跟结点开始,按照层序依..
分类:
编程语言 时间:
2016-12-03 02:32:35
阅读次数:
473
额,考前没能把这篇文章发出来,考后发一发。 我已经无法很好的给它们分类了。后面还有一些模板如果没法分类就都放在这里吧。 一、二分答案(贴了另外一个) 二、快速幂 三、归并(求逆序对) 四、堆(排序,手写priority_queue) 1、加入元素 2、取出堆顶元素 五、二分匹配 六、Tarjan(有 ...
分类:
其他好文 时间:
2016-12-02 18:34:30
阅读次数:
224
2.5.1 将各种数据排序 · 交易事务 · 指针排序 · 不可变的键 · 廉价的交换 · 多种排序方法 · 多键数组 · 使用比较器实现优先队列 · 稳定性:能够保留数组中重复元素的相对位置 稳定:插入排序、归并排序 不稳定:选择排序、希尔排序、快速排序、堆排序 2.5.2 我应该使用哪种排序算法 ...
分类:
编程语言 时间:
2016-11-27 07:48:17
阅读次数:
198
题目就是给两个序列,第一个是排序前的,第二个是排序中的,判断它是采用插入排序还是堆排序,并且输出下一次操作后的序列。 插入排序的特点就是,前面是从小到大排列的,后面就与原序列相同。 堆排序的特点就是,后面是从小到大排列的最大的几个数p~n-1,前面第一位则是p-1。 所以只要先按照插入排序的特点来判 ...
分类:
编程语言 时间:
2016-11-25 19:50:56
阅读次数:
206
首先,看一下堆的定义; n个元素的序列{k1,k2,…,kn}当且仅当满足下列关系之一时,称之为堆。 情形1:ki <= k2i 且ki <= k2i+1 (最小化堆或小顶堆) 情形2:ki >= k2i 且ki >= k2i+1 (最大化堆或大顶堆) 其中i=1,2,…,n/2向下取整; 该排序的 ...
分类:
编程语言 时间:
2016-11-24 14:32:40
阅读次数:
157
题目:在N个不相等的整数中找出最大的第K个数(N>K)。 思路:首先,用前K个整数构造容量为K的最小堆。然后,将后N-K个整数依次与堆顶元素比较,若比堆顶元素大,则替换堆顶元素并调整最小堆结构;反之,则继续比较下一个整数。最终,最小堆存储最大的k个数,其堆顶元素即为所求。 代码: 时间复杂度:(N- ...
分类:
编程语言 时间:
2016-11-23 06:31:09
阅读次数:
171