状态压缩,记忆化搜索。 用一个5进制数来表示每堆排到了哪一个位置。和2进制是一样的,不过不能用位运算。 #include #include #include using namespace std; const int maxn = 2000000+10; double dp[maxn]; bool... ...
分类:
其他好文 时间:
2016-06-12 00:21:32
阅读次数:
117
概论: 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 我整理的八大排序就是内部排序。 当数据较多时应该采用时间复杂度为o(nlog2n)的排序方法:快速排序、堆排序、归并排序 快速排序是这几种内部排... ...
分类:
编程语言 时间:
2016-06-11 00:40:05
阅读次数:
308
堆实际上是一颗二叉树,对于大根堆来说,它的特点就是父节点的值大于所有子节点的值。 C++的STL中priority_queue已经帮我们实现好了堆的数据结构,接下来我们一起学习并实践如何实现一个堆并用堆进行排序。priority_queue是STL的queue这个头文件中定义的数据结构,因此需要额外 ...
分类:
编程语言 时间:
2016-06-10 19:00:51
阅读次数:
173
话不多说,学了这么多,写个快速排序先。 除了快排,以后有时间还要加堆排、归并等等。 今天学了有,类、协议、语法。 因为算法类,不止一个算法。所以新建一个Algorithm(算法)协议: 接下来,新建一个Algorithm(算法)类,遵循算法协议: 然后就是使用,main文件: 验证一下结果: ...
分类:
其他好文 时间:
2016-06-10 17:47:09
阅读次数:
121
这里我们开始复习排序的一些面试题。 首先我们来看一下各个排序方法的时间复杂度和稳定性的比较,见下面表格: B是真数(0-9), R是基数(个十百) 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法, 冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。 1.冒泡排序: 算法原理:比较相邻的 ...
分类:
编程语言 时间:
2016-06-10 12:23:04
阅读次数:
226
二叉堆: 堆排序时间复杂度O(nlgn) 241 ...
分类:
其他好文 时间:
2016-06-08 20:25:15
阅读次数:
180
排序算法可谓数据结构模块中的重中之重,常见的哈希表,二叉树,搜索树/平衡树,位图等数据结构只是处理实际问题的抽象方法,实际在处理接受或生成的数据集时,排序算法显得尤其重要,排序算法家族很庞大,其中包括了冒泡排序,选择排序,插入排序,堆排序,快速排序,归并排序,基数排序,计数排序,希尔排序,箱排序,树型排序等众多算法,每种排序都有各自的特性,没有好坏之分,只有在特定的场景使用合适的排序算法才是上策,单纯的来比显得太过绝对,没有可比性。因为实际需求及各方面条件的限制使得排序算法的可选范围往往只缩小到某一种或某几...
分类:
编程语言 时间:
2016-06-07 06:37:23
阅读次数:
291