
算法
酷酷的糖先森
当你的才华还撑不起你的野心时,那就应该静下心来学习吧。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
经典排序算法 – 插入排序Insertion sort
经典排序算法 – 插入排序Insertion sort 插入排序就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到全部插入完毕。 插入排序方法分直接插入排序和折半插入排序两种,这里只介绍直接插入排序,折半插入排序留到“查找”内容中进行。 图1演示了对4个元素进行直接插入排序的过程,共需要(a),(b),(c)三次插入。以下代码仅供参考,欢迎指正原创 2014-12-16 11:49:09 · 1104 阅读 · 0 评论 -
经典排序算法 - 基数排序Radix sort
经典排序算法 - 基数排序Radix sort原理类似桶排序,这里总是需要10个桶,多次使用首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,暂时忽视十位数例如待排序数组[62,14,59,88,16]简单点五个数字分配10个桶,桶编号为0-9,以个位数数字为桶编号依次入桶,变成下边这样| 0 | 0 | 62 | 0 | 14 | 0原创 2014-12-16 11:50:01 · 1133 阅读 · 0 评论 -
经典排序算法 - 鸡尾酒排序Cocktail sort
经典排序算法 - 鸡尾酒排序Cocktail sort鸡尾酒排序基于冒泡排序,双向循环还是看例子吧,给定待排数组[2 3 4 5 1]第一趟过去时的每一步第一步迭代,2 [2 3 4 5 1] 第二步迭代,3 [2 3 4 5 1] 第三步迭代,4 [2 3 4 5 1] 第四步迭代,5 > 1交换[2 3 4 1 5] 第一趟回来时原创 2014-12-16 11:54:10 · 1058 阅读 · 0 评论 -
经典排序算法 - Proxmap Sort
经典排序算法 - Proxmap Sort这个排序是桶排序和基数排序的改进,理解了前两者,这个排序很容易理解先回忆下桶排序是怎么回事,它与桶的区别在于入桶规则,桶排序里是1入1号桶,2入2号桶这个排序把数字分区了,然后给出一个所谓的键,例如它规定0-9都入0号桶10-19都入1号桶,这样桶覆盖的范围将增大10倍,这在某种情况下是很有用的有了桶排的基础后,再看下边两张图就什么都明原创 2014-12-16 12:01:06 · 1240 阅读 · 0 评论 -
经典排序算法 - 快速排序Quick sort
经典排序算法 - 快速排序Quick sort原理,通过一趟扫描将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列举个例子如无序数组[6 2 4 1 5 9]a),先把第一项[6]取出来,用[6]依次与其余项进行比较,如果比[6]小就放[6原创 2014-12-16 11:48:05 · 1000 阅读 · 0 评论 -
经典排序算法 - 归并排序Merge sort
经典排序算法 - 归并排序Merge sort原理,把原始数组分成若干子数组,对每一个子数组进行排序,继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组举例无序数组[6 2 4 1 5 9]先看一下每个步骤下的状态,完了再看合并细节第一步 [6 2 4 1 5 9]原始状态第二步 [2 6] [1 4] [5 9]两两合并排序,排序细节后边介绍原创 2014-12-16 11:51:56 · 1127 阅读 · 0 评论 -
经典排序算法 - 冒泡排序Bubble sort
经典排序算法 - 冒泡排序Bubble sort原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束,其余类似看例子例子为从小到大排序,原始待排序数组| 6 | 2 | 4 | 1 | 5 | 9 |第一趟排序(外循环)第一次两两比较6 >原创 2014-12-16 11:52:55 · 1242 阅读 · 0 评论 -
经典排序算法 - 地精排序Gnome Sort
经典排序算法 - 地精排序Gnome Sort号称最简单的排序算法,只有一层循环,默认情况下前进冒泡,一旦遇到冒泡的情况发生就往回冒,直到把这个数字放好为止直接看它排序的过程,待排数组[6 2 4 1 5 9]先设计一个标识i=0然后从头开始判断,什么时候(i ,所以,如何控制i的值是这个算法的关键例如待排数组:[6 2 4 1 5 9][0原创 2014-12-16 11:56:12 · 1076 阅读 · 0 评论 -
经典排序算法 - 耐心排序Patience Sorting
经典排序算法 - 耐心排序Patience Sorting这个排序的关键在建桶和入桶规则上建桶规则:如果没有桶,新建一个桶;如果不符合入桶规则那么新建一个桶入桶规则:只要比桶里最上边的数字小即可入桶,如果有多个桶可入,那么按照从左到右的顺序入桶即可 举个例子,待排数组[6 4 5 1 8 7 2 3]第一步,取数字6出来,此时一个桶没有,根据建桶规则1新建桶,将把自己放进去原创 2014-12-16 11:58:14 · 2960 阅读 · 0 评论 -
经典排序算法 - 图书馆排序(Library Sort)
经典排序算法 - 图书馆排序(Library Sort)思路简介,大概意思是说,排列图书时,如果在每本书之间留一定的空隙,那么在进行插入时就有可能会少移动一些书,说白了就是在插入排序的基础上,给书与书之间留一定的空隙,这个空隙越大,需要移动的书就越少,这是它的思路,用空间换时间看红线标的那句话知道,这个空隙留多大,你自己定图书馆排序的关键是分配空间,分配完空间后直接使用插入排序即可原创 2014-12-16 12:05:14 · 3706 阅读 · 0 评论 -
关于使用JS前台加密、JAVA后台解密的RSA实现,RSA加密和签名
需求环境:西安项目中,客户要求保护用户的密码信息,不允许在http中传递明文的密码信息。 实现:用RSA非对称加密方式实现。后台生成rsa密钥对,然后在登陆页面设置rsa公钥,提交时用公钥加密密码,生成的密文传到后台,用私钥解密,获取密码明文。这样客户端只需要知道rsa加密方式和公钥,前台不知道私钥是无法解密的,此解决方案还是相对比较安全的。附件是参原创 2015-06-11 11:48:33 · 9626 阅读 · 5 评论 -
经典排序算法 - 桶排序Bucket sort
经典排序算法 - 桶排序Bucket sort补充说明三点1,桶排序是稳定的2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法我自己的理解哈,可能与网上说的有一些出入,大体都是同样的原理无序数组有个要求,就是成员隶属于固定(有限的)的区间,如范围为[0-9](考试分数为1-100等)原创 2014-12-16 11:48:47 · 1239 阅读 · 0 评论 -
经典排序算法 - 圈排序Cycle Sort
经典排序算法 - Cycle SortCycle sort的思想与计数排序太像了,理解了基数排序再看这个会有很大的帮助,圈排序与计数排序的区别在于圈排序只给那些需要计数的数字计数,先看完文章吧,看完再回来理解这一句话所谓的圈的定义,我只能想到用例子来说明,实在不好描述待排数组[ 6 2 4 1 5 9 ]排完序后[ 1 2 4 5 6 9 ]数组索引[ 0 1 2 3 4原创 2014-12-16 12:04:07 · 2017 阅读 · 0 评论 -
经典排序算法 - 选择排序Selection sort
经典排序算法 - 选择排序Selection sort顾名思意,就是直接从待排序数组里选择一个最小(或最大)的数字,每次都拿一个最小数字出来,顺序放入新数组,直到全部拿完再简单点,对着一群数组说,你们谁最小出列,站到最后边然后继续对剩余的无序数组说,你们谁最小出列,站到最后边再继续刚才的操作,一直到最后一个,继续站到最后边,现在数组有序了,从小到大举例先说看每步的状态变原创 2014-12-16 11:53:32 · 925 阅读 · 0 评论 -
经典排序算法 - 希尔排序Shell sort
经典排序算法 - 希尔排序Shell sort希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分,第一部分,希尔排序介绍第二部分,如何选取关键字,选取关键字是希尔排序的关键第一块希尔排序介绍准备待排数组[6 2 4 1 5 9]首先需要选取关键字,例如关键是3和1(第一步分成三组,第二步分成一组),那么待排数组分成了以下三个虚拟组:[6 1]一组[原创 2014-12-16 11:54:42 · 1048 阅读 · 0 评论 -
经典排序算法 - 堆排序Heap sort
经典排序算法 - 堆排序Heap sort堆排序有点小复杂,分成三块第一块,什么是堆,什么是最大堆第二块,怎么将堆调整为最大堆,这部分是重点第三块,堆排序介绍第一块,什么是堆,什么是最大堆什么是堆这里的堆(二叉堆),指得不是堆栈的那个堆,而是一种数据结构。堆可以视为一棵完全的二叉树,完全二叉树的一个“优秀”的性质是,除了最底层之外,每一层都是满的,这使得堆可原创 2014-12-16 11:55:43 · 943 阅读 · 0 评论 -
经典排序算法 - 梳排序Comb sort
经典排序算法 - 梳排序Comb sort梳排序还是基于冒泡排序,与冒泡不同的是,梳排序比较的是固定距离处的数的比较和交换,类似希尔那样这个固定距离是待排数组长度除以1.3得到近似值,下次则以上次得到的近似值再除以1.3,直到距离小至3时,以1递减不太好描述,还是看例子吧假设待数组[8 4 3 7 6 5 2 1]待排数组长度为8,而8÷1.3=6,则比较8和2,4和1,并做交原创 2014-12-16 11:57:35 · 1405 阅读 · 0 评论 -
经典排序算法 - 珠排序Bead Sort
经典排序算法 - 珠排序Bead Sort珠排序非常另类[地精也很另类],看完你就知道了,先介绍思路,再分解过程这是它的英文论文 http://www.cs.auckland.ac.nz/~jaru003/research/publications/journals/beadsort.pdf截图即从上边的论文里抓的屏先了解一个概念,不然不容易理解,一个数字3用3个1来表示一个数原创 2014-12-16 11:58:34 · 1826 阅读 · 0 评论 -
经典排序算法 - 鸽巢排序Pigeonhole sort
经典排序算法 - 鸽巢排序Pigeonhole sort原理类似桶排序,同样需要一个很大的鸽巢[桶排序里管这个叫桶,名字无所谓了]鸽巢其实就是数组啦,数组的索引位置就表示值,该索引位置的值表示出现次数,如果全部为1次或0次那就是桶排序例如var pigeonHole = new int[100];pigeonHole[0]的值表示0的出现次数...pigeonHole[1]原创 2014-12-16 11:51:13 · 1669 阅读 · 0 评论 -
经典排序算法 - 奇偶排序Odd-even sort
经典排序算法 - 奇偶排序Odd-even sort又一个比较性质的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序举例吧,待排数组[6 2 4 1 5 9]第一次比较奇数列,奇数列与它的邻居偶数列比较,如6和2比,4和1比,5和9比[6 2 4 1 5 9]交换后变成[2 6 1 4 5 9] 第二次比较偶数列,即6和1比,5和原创 2014-12-16 11:57:03 · 2088 阅读 · 0 评论 -
经典排序算法 - 计数排序Counting sort
经典排序算法 - 计数排序Counting sort注意与基数排序区分,这是两个不同的排序计数排序的过程类似小学选班干部的过程,如某某人10票,作者9票,那某某人是班长,作者是副班长大体分两部分,第一部分是拉选票和投票,第二部分是根据你的票数入桶看下具体的过程,一共需要三个数组,分别是待排数组,票箱数组,和桶数组var unsorted = new int[] { 6, 2,原创 2014-12-16 12:00:31 · 1026 阅读 · 0 评论 -
经典排序算法 - Flash Sort
经典排序算法 - Flash SortFlashSort依然类似桶排,主要改进了对要使用的桶的预测,或者说,减少了无用桶的数量从而节省了空间,例如待排数字[ 6 2 4 1 5 9 100 ]桶排需要100个桶,而flash sort则由于可以预测桶则只需要7个桶即待排数组长度个桶,如何预测将要使用的桶有这么一个公式该排序有前置条件,需要知道待排数组的区间和待排数组的长度,原创 2014-12-16 12:02:03 · 1570 阅读 · 0 评论 -
经典排序算法 - Strand Sort
经典排序算法 - Strand SortStrand sort是思路是这样的,它首先需要一个空的数组用来存放最终的输出结果,给它取个名字叫"有序数组"然后每次遍历待排数组,得到一个"子有序数组",然后将"子有序数组"与"有序数组"合并排序重复上述操作直到待排数组为空结束 看例子吧待排数组[ 6 2 4 1 5 9 ]第一趟遍历得到"子有序数组"[ 6 9],并将其归并排原创 2014-12-16 12:03:44 · 1174 阅读 · 0 评论 -
加密与加盐
加密我们在用户模块,对于用户密码的保护,通常都会进行加密。从最简单来说,小明盗取了你的数据库信息(小明躺枪),但由于你对你数据库中的用户信息的密码是加密的(我们假设加密之后的密文是无法破解的),那小明即使得到信息也没法进行登录。这是最最基本的一点防范措施。 我们通常的做法是,用户在提交注册信息时,在后台的业务逻辑中将密码进行加密(例如采用MD5或者BCrypt加密算法),所以存放在数据库中的信息为原创 2017-09-07 10:49:31 · 4193 阅读 · 0 评论