算法和数据结构
文章平均质量分 62
神秘博士来袭
这个作者很懒,什么都没留下…
展开
-
快速排序和插入排序
/*快速排序是一种划分交换排序,采用分而治之的策略。基本思想是:通过一趟排序将要排序的数据分割成两部分,其中一部分的所有数据比另一部分的所有数据都要小,然后再按照这个方法对这两部分数据分别进行快速排序,整个排序过程以递归进行。left : 最左边元素的下标right: 最右边元素的下标*/void QuickSort1(int *a,int left,int right){原创 2016-02-25 17:48:02 · 1609 阅读 · 0 评论 -
合并排序详解
看到一篇很详细的文章,将原文照抄如下:—————————————————————————————————————–—————————————————————————————————————–文章作者:Yx.Ac 文章来源:勇幸|Thinking (http://www.ahathinking.com) 插入归并归并排序的时间复杂度为O(nlgn),空间复杂度为O(n);但是一般来讲,基于从单个记录转载 2016-04-26 21:37:45 · 5982 阅读 · 0 评论 -
计数排序
常用的排序算法有很多种,如最常用的快速排序和堆排序等,但这些算法都是基于元素的直接比较,计数排序不是比较排序,排序的速度快于任何比较排序算法,是空间换时间权衡思想的一个典型例子。比较计数排序针对排序列表中的每一个元素,算出列表中小于该元素的元素个数,并把结果记录在一张表中。这个“个数”指出了该元素在有序列表中的位置。例如一个列表A中有一个元素为10,而小于10的元素个数有5个,那么10原创 2016-04-30 14:37:51 · 4235 阅读 · 1 评论 -
堆排序
堆的概念通俗的说就是小顶堆本身的值小于或等于自己的任一个孩子节点(如果有孩子节点的话),这样看来,小顶堆中根节点的值是所有元素中最小的。大顶堆则刚好相反。堆节点的访问通常堆是通过一维数组来实现的。在数组起始位置为0的情形中:父节点i的左子节点在位置(2*i+1); 父节点i的右子节点在位置(2*i+2); 子节点i的父节点在位置floor((i-1)/2);以下为上图中的大顶堆在一维数组中的原创 2016-04-27 14:09:49 · 608 阅读 · 0 评论 -
生成全排列示例
代码示例#include <iostream>#include <string>using namespace std;void fun1(string & list,int n , int index){ if (index >= n) { cout << list << endl; } else { for (int原创 2016-06-25 16:33:03 · 635 阅读 · 0 评论 -
Horspool(字符串匹配)算法
Horsepool算法是Boyer-Moore算法的简化版本,这也是一个空间换时间的典型例子。算法把模式P和文本T的开头字符对齐,从模式的最后一个字符开始比较,如果尝试比较失败了,它把模式向后移。每次尝试过程中比较是从右到左的。假设文本中,对齐模式最后一个字符的元素是c,Horspool算法根据c的不同情况来确定移动距离,无论c是否和模式的最后一个字符相匹配。一般来说,会存在下面四种情况。情况1:看原创 2016-04-30 23:08:13 · 27489 阅读 · 1 评论 -
RSA加密算法
选择两个大质数p和q,越大越好,然后计算它们的乘积 N=p∗qN = p * q。 接着计算N的欧拉函数原创 2016-06-19 14:27:09 · 752 阅读 · 0 评论