C++ Primer 学习中。。。
简单记录下我的学习过程 (代码为主)
/*****************************************
STL-算法--Heap算法
堆排序算法 (heapsort)
make_heap() //把容器内的数据做堆排序
push_heap() //向堆内放入元素
...
分类:
编程语言 时间:
2016-01-30 02:58:58
阅读次数:
186
实现堆排序需要解决两个问题:1、如何将n个待排序的数建成堆2、输出堆顶元素之后。如何调整剩余n-1个元素,使其成为一个新堆使用最大堆来进行堆排序算法实现,所谓堆排序就是每次交换堆顶元素与堆中最后一个元素,然后对前面的堆中的元素从堆顶开始调整。具体代码如下: 1 #include 2 3 usin.....
分类:
编程语言 时间:
2016-01-20 18:44:51
阅读次数:
151
1 #include 2 #include 3 4 using namespace std; 5 6 #define ARRAY_SIZE 10 7 8 int g_bubble_sort[ARRAY_SIZE] = {3, 1, 5, 9, 12, 7, 8, 13, ...
分类:
编程语言 时间:
2016-01-18 17:34:24
阅读次数:
201
堆排序 不仅在排序上有较好的时间复杂度,同时最大堆,最小堆在解决top10等问题上有很好的效果。最大堆性质,除了根以为的所有结点i都要满足: A[parent(i)]>=A[i]即,子节点一定小于等于父节点,且任意子树也满足该性质。Max-Heapify是维持最大堆性质的关键。时间复杂度O(lg.....
分类:
编程语言 时间:
2015-12-12 00:03:19
阅读次数:
199
1、堆排序概述堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。可以利用数组的特点快速定位指定索引的元素。堆分为大根堆和小根堆,是完全二叉树。大根堆的要求是每个节点的值都不大于其父节点的值,即A[PARENT[i]] >= A[i]。在数组的非降序排...
分类:
编程语言 时间:
2015-11-19 10:46:50
阅读次数:
207
前一段时间师姐在看大华数据结构这本书,当看到堆排序是她问我,当时我觉得堆排序很简单,无非就是堆顶和堆尾对换,并输出最后一个,剩下的进行堆调整再一次循环下去。但是她又问道怎么实现堆调整,当时有点炉子,但是当我真正想的时候,却出现了很多问题,正好最近实现排序算法,所以今天就详细说说堆排序的具体。堆: ....
分类:
编程语言 时间:
2015-10-19 17:04:56
阅读次数:
216
快速排序每一趟比较用时O(n),要进行lgn次比较,才最终完成整个排序。所以快排的复杂度才为O(n*lgn)。而本节,我们要讲的是堆排序算法。据我所知,要真正彻底认识一个算法,最好是去查找此算法的原发明者的论文或相关文献。一、堆排序算法的基本特性时间复杂度:O(nlgn) //等同于归并排序最坏:O...
分类:
编程语言 时间:
2015-09-01 13:58:07
阅读次数:
194
题目:
一个整形数组里除了一个数字出现3次以外,其他数字都出现2次.请写程序找出这个出现3次的数字.
要求使用辅助空间O1,时间复杂度Onlogn.
1.使用堆排序.(堆排序的时间复杂度为Onlogn)
因为堆排序每次取到的都是最大(或是最小)的数字,三个相同的数字肯定是紧挨着被取出的.
所以在原先的堆排序算法上,加2个标记记录即可.
代码:
// 使用堆排序,每次取...
分类:
编程语言 时间:
2015-08-31 13:35:12
阅读次数:
200