自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法系列—高位优先的字符串排序

《算法第四版第五章》在高位优先的字符串排序算法中,要特别注意到达字符串末尾的情况。合理的做法是将 所有字符都已经被检查过的字符串 排在 所有子数组的前面。高位优先排序对于待排序的字符串没有什么要求高位优先排序的过程中使用了键索引计数算法高位优先排序要特别注意字符串达到末尾的情况,因为当字符串达到末尾时,比其本身加上任意字符都要小,如app小于apple。为了判断字符串是否已达到末尾

2017-01-14 23:49:34 1205

原创 算法系列—低位优先的字符串排序(基于键索引计数法)

原理日后有空补上。今天该回宿舍了- -此版本可实现相同长度的字符串数组,不同长度稍加改动即可。C++代码如下:#include#include using namespace std;void LSD(string a[], int size,int W){ //对字符串数组按照前W个字符排序 int R = 256; //基于ascII码 string *aux =

2017-01-13 23:30:58 735

原创 算法系列—广度优先搜索(BFS)

单点最短路径:给定一幅图和一个顶点s,从s到给定的顶点v是否存在一条路径?如果有,找出其中最短的那一条。解决这个问题的经典方法叫做广度优先搜索。广度优先搜索思路:要找到从s到v的最短路径,从s开始,在所有由一条边就可以到达的顶点中寻找v,如果找不到,就继续在距离两条边的顶点中查找v,如此一直执行。C++实现代码如下://BFS.cpp//无向图#includ

2016-11-03 16:07:08 516

原创 算法系列—图的深度优先搜索(递归)/C++

图的遍历是指从图的某一个顶点出发,按照某种方法沿着边对图中的顶点全部访问一次。ps:树是一幅无环连通图。互不相连的树组成的集合 称为森林。连通图的生成树是它的一幅子图,它含有图中所有顶点且是一棵树。当且仅当一幅含有V个结点的图G满足下列五个条件之一时,他就是一棵树:1 G有V-1条边且不含有环。2 G有V-1条边且是连通的。3 G是连通的,且删除任意一条边都会使它不再连通。

2016-11-03 14:23:36 7782

原创 算法系列—红黑树(C++实现)

红黑树(Red-Black Tree)是二叉搜索树(Binary Search Tree)的一种改进。二叉查找树在最坏情况下可能会变成一个链表(从小到大插入时)。而红黑书每次插入或删除后都会用O(logN)的时间来修改树的结构以保持平衡。红黑树另一个优点是:除了删除和插入以外,二叉查找树中的查找最大键,查找最小键,查找小于当前键的元素数量,查找某一个键 等算法不用任何修改就可以直接在红黑树中使

2016-10-31 11:08:44 918

原创 算法系列—二叉查找树

在二叉树中,每个结点只能有一个父结点(根结点除外),而且每个结点都会有左右两条链接,分别指向自己的左子结点和又子结点。结点结构定义:template class Node{public: T data; int size; //以该节点为根的节点总数 Node* lson; Node* rson; Node(T data,int size) { this->

2016-10-27 13:36:08 319

原创 算法系列—堆排序

堆排序可以分为两个阶段堆得构造阶段,我们将原始数组重新组织安排进一个堆中下沉排序阶段,从堆中按顺序取出所有元素并得到排序结果PS:此处堆排序,数组下标是从1开始,0位置不存储。#include #include void sink(int A[], int k, int size);void HeapSort(int A[], int size){ int N

2016-10-23 16:56:23 305

原创 算法系列—快速排序及其优化(递归)

快速排序和归并排序是互补的,归并排序将子数组分成两个子数组分别排序,并将有序的子数组归并以将整个数组排序。而快速排序则是当两个子数组有序时整个数组也就自然有序了。归并排序:递归调用发生在整个数组处理之前,一个数组被等分为两半。快速排序:递归调用发生在处理整个数组之后,切分的位置取决于数组的内容。初步实现如下:#include #include void sort(int A[],

2016-10-23 09:56:21 450

原创 算法系列—希尔排序(基于插入排序)

希尔排序为了加快速度简单的改进了插入排序,交换不相邻的元素以对数组的局部进行排序,并最终用插入排序对局部有序的数组排序。思路:使数组中任意间隔为h的元素都是有序的,这样的数组成为h有序数组,在进行排序时,如果h很大,我们就能将元素移动到很远的地方以下方法从N/3开始递减至1#include void SHELLSORT(int A[], int size){ int

2016-10-22 21:48:01 328

原创 算法系列—自底向上归并排序

思路:先归并微型数组,然后再成对归并得到的子数组,直到我们将整个数组归并到一起先进行两两归并(每个元素想象成大小为1的数组),然后四四归并,然后八八归并。。。最后一次归并的第二个子数组可能比第一个子数组要小(merge方法可以解决此问题)对于长度为N的任意数组,自底向上的归并排序需要  1/2NlgN至NlgN次比较,最多访问数组6NlgN次。N为数组元素个数。

2016-10-22 17:17:03 1487

原创 算法系列—自顶向下归并排序(递归)

#include //函数声明void sort(int A[], int tempArry[], int lo, int hi);void merge(int A[], int tempArry[], int lo, int mid, int hi);void MERGESORT(int A[], int size);void MERGESORT(int A[],in

2016-10-22 16:48:41 700

空空如也

空空如也

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

TA关注的人

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