自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(17)
  • 收藏
  • 关注

原创 应用不相交集类生成迷宫

应用不相交集类(采用高度求并和路径压缩查找)构建一个n阶正方形迷宫,迷宫拥有n的平方个单元,每个单元拥有三个数据成员。一个数据成员存储父节点,如果是根节点则存储树的高度的负值减一。另两个数据成员分别代表单元的下侧墙和单元的右侧墙。再额外添加上边框和左边框就构成迷宫。 一开始所有的单元相互不连通,构建时随机选择一堵可以拆的墙,如果墙两侧的单元不连通,联通他们并拆掉墙。如果联通就不进行操作。进行到最后

2017-07-31 15:41:41 930

原创 不相交集类

union采用按高度求并,find采用路径压缩。存储的高度值为实际高度的负值减一。#include <vector>using namespace std;class DisjSets{public: explicit DisjSets(int numElements); int find(int x)const; int find(int x); void u

2017-07-30 10:30:29 310

原创 可变长度的基数排序

字符串的比较是从高有效位开始依次比较,和长度没有太大关系。因此可以理解为末尾补零,长度相同。先将字符串按长度进行排序,然后从低有效位开始比较,对零(没有的位)不进行处理(已经在正确的位置)。#include <iostream>#include <vector>#include <string>using namespace std;void radixSort(vector<string>

2017-07-28 22:09:30 334

原创 桶排序与基数排序与计数基数排序

输入只有大小小于M的正整数,可以采用桶式排序。#include <iostream>#include <vector>#include <string>using namespace std;//基数排序void radixSort(vector<string> & arr,int stringLen){ const int BUCKETS=256; vector<vec

2017-07-28 20:40:40 253

原创 快速选择

快速选择和快速排序类似,将数组分为S1和S2。当K值小于S1的的长度时,对S1进行递归。当k值刚好等于pivot时,那么已经找到了。当k值大于S1长度加一时,对S2进行递归。最后K始终在数组下标k-1的位置。#include <iostream>#include <vector>using namespace std;template <typename Comparable>void ins

2017-07-25 10:13:14 182

原创 快速排序

快速排序的优点在于在合适的位置进行分割并且不用额外的数组。#include <vector>using namespace std;template <typename Comparable>void quickSort(vector<Comparable> & a){ quickSort(a,0,a.size()-1);}//三位中值分割template <typename Co

2017-07-23 21:02:44 170

原创 递归排序

#include <vector>using namespace std;template <typename Comparable>void SORT(vector<Comparable> & items){ if(items.size()>1) { vector<Comparable> smaller; vector<Comparable>

2017-07-22 20:51:30 173

原创 归并排序

#include <vector>using namespace std;template <typename Comparable>void mergeSort(vector<Comparable> & a){ vector<Comparable> tmpArray(a.size()); //存放归并结果的数组 mergeSort(a,tmpArray,0,a.size()-

2017-07-22 16:10:54 167

原创 堆排序

先用线性时间建立一个堆,然后将堆的最后一个元素与第一个元素交换。将堆的大小减一并执行下滤。#include <vector>using namespace std;template <typename Comparable>void heapsort(vector<Comparable> & a){ for(int i=a.size()/2-1;i>=0;--i) {

2017-07-21 15:52:35 161

原创 插入排序与希尔排序

#include <iostream>#include <vector>#include <functional>using namespace std;template <typename Iterator ,typename Comparator >void insertionSort(const Iterator & begin,const Iterator & end,Compara

2017-07-21 10:40:28 179

原创 优先队列测试程序

默认实现的是最大堆,将比较器改成greater可将其变成最小堆。#include <iostream>#include <vector>#include <queue>#include <functional>#include <string>using namespace std;template <typename PriorityQueue>void dumpContents(co

2017-07-18 11:12:35 205

原创 堆——二项队列

二项队列由一系列二项树组成,每个高度只允许一棵二项树。每棵树Bk由一个根和Bk-1…B0组成。删除最小值操作是先找到最小根值的树,然后删掉树根,得到新的一组二项队列Bk-1…B0。将两个队列合并,便完成了删除最小值操作。#include <vector>template <typename Comparable>class BinomialQueue{public: BinomialQ

2017-07-18 10:32:09 351

原创 左式堆

左式堆核心是合并操作。增加了新的数据成员,零路径长(npl)。左儿子的npl不小于右儿子,父节点的npl等于右儿子npl加1。在合并操作中要保持左式堆的性质并更新节点的npl。合并的方式为递归的将具有较大根值的堆与具有较小根植的堆的右子树合并。template <typename Comparable>class LeftistHeap{public: LeftistHeap();

2017-07-17 10:35:53 377

原创 优先队列(二叉堆)

二叉堆的主要操作有deleteMin(),insert()和buildHeap()。deleteMin()和buildHeap()采用下滤,insert()采用上滤。#include <vector>template <typename Comparable>class BinaryHeap{public: explicit BinaryHeap(int capacity=100);

2017-07-15 22:17:07 267

原创 平方探测的另一种插入方式

如果把新元素插入到搜索路径的第一个inactive单元,这样能够回收一个deleted单元,潜在的节省了空间。查找元素位置时分两种情况,一种是元素已经在表中,则返回元素的位置。另一种是元素不在表中,则返回第一个inactive单元位置。添加新的变量firstPos记录第一个inactive单元位置。findPos代码如下int findPos(const HashedObj& x)const

2017-07-11 13:33:48 276

原创 杜鹃散列

杜鹃散列表通常通过一个拥有多个散列函数的大表来实现,这些散列函数探测整个大表。插入时首先依次尝试所有散列函数,一旦找到空位便插入。如果试完所有散列函数仍未找到空位,便随机踢出一个,记录最后被踢出的位置(如果下次随机出来的位置与最后被踢出的位置相同,则重新随机)然后将被踢出去的项插入散列表,重复上述步骤。如果经过一定次数的尝试,仍未成功插入,则更换一组散列函数(不改变表的大小)。若更换五组散列函数后仍

2017-07-10 13:09:38 1300

原创 数据结构——散列表

分离链接散列表和平方探测散列表#include <vector>#include <list>#include <string>#include <algorithm>#include <cmath>//判断一个数是否是素数bool isPrime(int size){ //保证了size是奇数,因此因子也是奇数 for(int i=3;i<=sqrt(size);i+=

2017-07-08 11:10:37 227

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除