在java中一个hashCode算法,可以用来计算一个字符串的hash值,今天一个朋友突然问俺能不能在js中计算hashCode,要求和java的hashCode计算结果一样。 对于java的hashCode,以前到现在也一直没有了解过其算法,不过猜想应该也不会太难,于是现在java中写了这段代码进行测试: 运行结果:899755 按下Ctrl键点击hashCode方法名跟进去看了下其算法,发现是很简单的几句代码,如下所示:代码如下: public int hashCode() { int h = hash;...
笔试面试经常涉及各种算法,本文简要介绍常用的一些算法,并用JavaScript实现。 一、插入排序1)算法简介插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素...
"快速排序"的思想很简单,整个排序过程只需要三步:(1)在数据集之中,找一个基准点(2)建立两个数组,分别存储左边和右边的数组(3)利用递归进行下次比较看一个demo:http://jsdo.it/norahiko/oxIy/fullscreen(网页打开可能较慢,慢慢等待吧)function quickSort(arr){if(arr.length
冒泡排序 冒泡的原理是让最大元素或者最小元素”浮起来“ 插入排序,选择排序,快速排序,冒泡排序都是比较排序 思路 依次比较相邻的两个数,将小数放在前面,大数放在后面。 step1:比较第1个和第2个数,将小数放前,大数放后。比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。 step2:在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小...
比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。function sort(elements){for(var i=0;ielements[j+1]){var swap=elements[j];elements[j]=elements[j+1];elements[j+1]=swap;}}} }var elem...
这篇文章主要介绍了Javascript堆排序算法及其示例,非常实用,需要的朋友可以参考下。堆排序分为两个过程:1.建堆。堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用小根堆。如果是大根堆,则通过调整函数将值最大的节点调整至堆根。2.将堆根保存于尾部,并对剩余序列调用调整函数,调整完成后,再将最...
比较相邻的元素。如果第一个比第二个大,就交换他们两个。 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤,除了最后一个。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。代码如下: function sort(elements){for(var i=0;i<elements.length-1;i++){for(var j=0;j<elements.length-i-1;j++){if(elements[j]>elemen...
快速排序是对冒泡排序的一种改进。通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最终达到整个数据变成有序序列。 假设要排序的数组是A[0]……A[N-1],首先任意选取一个数据(通常选用数组的第一个数)作为基准数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为...
今天发现了一个挺好玩的算法题,下面是它的算法描述,源自twitter的一道面试题。 twitter puddles 算法描述 先看一副图上图里的数字是根据一个数组内容来描述的,最后会根据每个数字的大小来模拟一道墙的高度,最后生成一面墙,问你,当下雨的时候,这面墙可以装多少水,以1为计数单位。 下面是装完水之后的一面墙的样子看完上面上幅图,感觉是不是很好玩,确实,下面来简单的分析下它的算法实现 其实这个原理比较简单,总共有下面几个要点: 1....
这两天看了下某位大神的github,知道他对算法比较感兴趣,看了其中的一个计算数字的步数算法,感觉这个有点意思,所以就自己实现了一个。 算法描述与实现原理 给出一个整型数字,统计出有多少种走法可以到达目标,比如一个数字4,可以有下面几种走法代码如下:[ 1, 3 ][ 4 ][ 1, 1, 2 ][ 2, 2 ][ 1, 1, 1, 1 ]其实通过上面的组合可以得出下面的结论。 1.先列出所有项是1的组合 2.依次从左到右项为1的组合 3.递归上面的集合,找出项里1的索引...
时至期末,补习信息安全概论作业。恰巧遇古典密码学算法中的playfair算法和hill算法,用javascript语言实现起来是在有趣,边查百度边编码,顺便好好补习一下javascript基础。 playfair Playfair密码(英文:Playfair cipher 或 Playfair square)是一种替换密码。依据一个5*5的正方形组成的密码表来编写,表中排列有25个字母。对于英语中的26个字母,去掉最常用的Z,构成密码表。 实现思路: 1,编制密码表密钥是一个单词或词组,密...
谜题穷举一个数组中各个元素的排列策略减而治之、递归JavaScript解代码如下: /*** Created by cshao on 12/23/14.*/ function getPermutation(arr) {if (arr.length == 1) {return [arr];}var permutation = [];for (var i=0; ivar firstEle = arr[i];var arrClone = arr.slice(0);arrClone.splice(i, 1);var childPermutation = getPermutation(arrClone);for (var j=0; j<childPermutation.length; j++) {childPermutation[j].un...
谜题 N皇后问题。将N个皇后放置在NxN的国际象棋棋盘上,其中没有任何两个皇后处于同一行、同一列或同一对角线上,以使得它们不能互相攻击。 策略 回溯法。 JavaScript解 以8皇后问题为例:代码如下: /*** Created by cshao on 12/28/14.*/ function getNQueens(order) {if (order < 4) {console.log(N Queens problem apply for order bigger than 3);return;}var nQueens = [];var backTracking = false;rowLoop:for (var row=0; ...
谜题三阶幻方。试将1~9这9个不同整数填入一个33的表格,使得每行、每列以及每条对角线上的数字之和相同。策略穷举搜索。列出所有的整数填充方案,然后进行过滤。JavaScript解代码如下: /*** Created by cshao on 12/28/14.*/ function getPermutation(arr) {if (arr.length == 1) {return [arr];}var permutation = [];for (var i=0; ivar firstEle = arr[i];var arrClone = arr.slice(0);arrClone.splice(i, 1);var childPermutat...
二叉树的概念 二叉树(Binary Tree)是n(n>=0)个结点的有限集合,该集合或者为空集(空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。二叉树的特点 每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。二叉树中每一个节点都是一个对象,每一个数据节点都有三个指针,分别是指向父母、左孩子和右孩子的指针。每一个节点都是通过指针相互连接的。相连指针的关系都是父子关系。...