数据结构与算法分析C++描述 第三版 (读书笔记)
文章平均质量分 77
laomahao
这个作者很懒,什么都没留下…
展开
-
选择问题(求N个数中第k个最大者)
方法1: 对这N个数进行排序,然后找出第k个最大者。 这是最容易想到的也是最容易写出来的方法,但这种方法效率很低,当N比较大的时候不适合用。 代码如下: #include #include using namespace std; typedef vector Vect; typedef vector::iterator Iter; void sort(Vect &ive原创 2012-03-03 12:55:06 · 2696 阅读 · 0 评论 -
最长公共子序列问题
问题描述: 给定整数A1,A2,…,AN(可能有负值),求连续子序列和的最大值。(为方便起见,如果所有整数都为负值,则最大子序列和为0) 方法一: 这是个显而易见的方法,几乎每个人在第一眼看到该问题都能够想出来的方法。就是将所有的子序列找出来,然后求和最大的一个。如果序列足够大,该方法的效率可想而知。 代码如下: #include #include原创 2012-03-04 22:20:24 · 427 阅读 · 0 评论 -
STL中vector部分功能的实现
#ifndef __VECTOR_H__ #define __VECTOR_H__ template class Vector { public: explicit Vector(int size = 0);//加explicit关键字是为了防止类型的隐式转换 Vector(const Vector &rhs); //拷贝构造函数 ~Vector(); const Vector原创 2012-03-07 17:01:02 · 654 阅读 · 0 评论 -
希尔排序
希尔排序是对插入排序的一种改进,具体的时间复杂度本人还没有完全理解,只是明白了它是怎么运行的。 希尔排序基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组,所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 #include #include #include using namespace std; te原创 2012-05-01 10:45:38 · 457 阅读 · 0 评论 -
堆排序
堆排序利用了大根堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单。 (1)用最大堆排序的基本思想 ① 先将初始文件R[1..n]建成一个最大堆,此堆为初始的无序区; ② 再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1原创 2012-05-01 11:41:23 · 614 阅读 · 0 评论 -
插入排序
插入排序是最简单的排序之一,有N-1趟排序组成,最差时间复杂度为O(n^2),最优时间复杂度为O(n),平均时间复杂度为O(n2)。 #include #include #include using namespace std; template void insertSort(vector &data) { int j = 1; int size = data.size(原创 2012-05-01 10:19:27 · 501 阅读 · 0 评论 -
归并排序
归并排序的基本操作是合并两个已排序的表。因为两个表是已排序的,所以若将输出放到第三个表中则该算法可以通过对输入数据一趟排序来完成。基本的合并算法是取两个输入数组A和B、一个输出数组C以及三个计数器(Actr、Bctr、Cctr),他们的初始位置位于对应数组的初始端。A[Actr]和B[Bctr]中的较小者被复制到C[Cctr],相关的计数器向下移动一步。当两个输入表一个用完时,则将另一个表中的剩余原创 2012-05-03 11:40:45 · 597 阅读 · 0 评论