2016年2月23日

摘要: 计数排序 耗时Θ(n) 计数排序需要首先确定数组A中数据的范围,然后统计在每个位置上数据出现的个数,将其保存在一个与数据范围等大的数组C中。 然后对C进行累加,这样C[i]的值,便可以当作输出数组B中数值i的位置。 对A中的每一个数据,通过C[A[j]]-1,得到在B中的位置,同时对C[A[j]]- 阅读全文
posted @ 2016-02-23 22:34 峰入云 阅读(210) 评论(0) 推荐(0)
摘要: 快速排序使用归并思想,对于子数组A[p..r],有如下三步分治过程: 分解:划分为A1[p..q-1]和A2[q+1..r],使得A1元素比A[q]小,A2元素比A[q]大 解决:递归调用快速排序,对分解的数组A1和A2进行排序 合并:因为子数组都是原址排序,不需要排序,数组A[p..r]已经有序 阅读全文
posted @ 2016-02-23 21:58 峰入云 阅读(190) 评论(0) 推荐(0)
摘要: 堆排序 static void Main(string[] args) { //产生随机序列 var rand = new Random(); List<int> sequence = new List<int>(); int length = 50; int count = 0; //以堆的形状输 阅读全文
posted @ 2016-02-23 20:21 峰入云 阅读(206) 评论(0) 推荐(0)
摘要: 算法 最坏情况 平均情况/期望运行时间 插入排序 Θ(n^2) Θ(n^2) 归并排序 Θ(nlg(n)) Θ(nlg(n)) 堆排序 O(nlg(n)) 快速排序 Θ(n^2) Θ(nlg(n))(期望) 计数排序 Θ(k+n) Θ(k+n) 基数排序 Θ(d(k+n)) Θ(d(k+n)) 桶排 阅读全文
posted @ 2016-02-23 19:25 峰入云 阅读(220) 评论(0) 推荐(0)

2016年2月22日

摘要: 结构上是递归的,为了解决给定的问题,算法一次或者多次递归调用自身,解决紧密相关的子问题,通常有三个步骤: 分解:将问题分级为若干个子问题 解决:对子问题进行递归求解,如果子问题足够小,则直接求解 合并:子问题的解还原为原问题的解 使用归并法排序: static void Main(string[] 阅读全文
posted @ 2016-02-22 14:51 峰入云 阅读(199) 评论(0) 推荐(0)
摘要: 算法 阅读全文
posted @ 2016-02-22 14:16 峰入云 阅读(121) 评论(0) 推荐(0)

2016年1月26日

摘要: 这些特性在一些特殊应用中非常重要,而在另外一些情况没有什么用,这里介绍这些非广泛使用的特征19.1控制内存分配标准库自定义了如下内存分配工具// theseversions might throw an exceptionvoid *operator new(size_t); // allocat... 阅读全文
posted @ 2016-01-26 16:05 峰入云 阅读(207) 评论(0) 推荐(0)

2016年1月23日

摘要: 18.1异常处理try { // actions that cause an exception to be thrown}catch (...) { // work to partially handle the exception throw;}在C++中,通过throwing... 阅读全文
posted @ 2016-01-23 21:38 峰入云 阅读(203) 评论(0) 推荐(0)
摘要: 17.1类型tuple tuple是类是pair的模板。每个pair都不相同,但是都有两个成员。而一个tuple类型会有任意数量的成员。(定义在tuple头文件中) tuple<T1,T2,...,Tn> t; t是一个tuple,成员数位n,第i个成员的类型为Ti。所有成员都进行值初始化 tupl 阅读全文
posted @ 2016-01-23 17:47 峰入云 阅读(446) 评论(0) 推荐(0)

2016年1月22日

摘要: 16.1.1函数模板 When we call a function template, the compiler (ordinarily) uses the arguments of the call to deduce the template parameter(s) for us. The 阅读全文
posted @ 2016-01-22 21:25 峰入云 阅读(354) 评论(0) 推荐(0)

导航