logo资料库

js常见算法实现汇总.doc

第1页 / 共18页
第2页 / 共18页
第3页 / 共18页
第4页 / 共18页
第5页 / 共18页
第6页 / 共18页
第7页 / 共18页
第8页 / 共18页
资料共18页,剩余部分请下载后查看
常见算法是 js 实现汇总 /*去重*/ /*二分法*/ 又称为折半查找算法,但是有缺陷就是要求数字是预先排序好的 function binary(items,value){
var startIndex=0, stopIndex=items.length-1, midlleIndex=(startIndex+stopIndex)>>>1; while(items[middleIndex]!=value && startIndexvalue){ stopIndex=middleIndex-1; }else{ startIndex=middleIndex+1; } middleIndex=(startIndex+stopIndex)>>>1; } return items[middleIndex]!=value ? false:true; } /*十六进制颜色值的随机生成*/ function randomColor(){ var arrHex=["0","2","3","4","5","6","7","8","9","a","b","c","d"], strHex="#", index; for(var i=0;i<6;i++){ index=Math.round(Math.random()*15); strHex+=arrHex[index]; } return strHex; } /*一个求字符串长度的方法*/ function GetBytes(str){ var len=str.length, bytes=len; for(var i=0;i255){ bytes++; }
} return bytes; } /*插入排序*/ 所谓的插入排序,就是将序列中的第一个元素看成一个有序的子序列,然后不段向后比较交换比较交换。 ---------------------------------华丽丽的分割线------------------------------------- function insertSort(arr){ var key; for(var j = 1; j < arr.length ; j++){ //排好序的 var i = j - 1; key = arr[j]; while(i >= 0 && arr[i] > key){ arr[i + 1] = arr[i]; i --; } arr[i + 1] = key; } return arr; } /*希尔排序*/ 希尔排序,也称递减增量排序算法具体描述:http://zh.wikipedia.org/zh/%E5%B8%8C%E5%B0%94%E6%8E%92%E5%BA%8F 其实说到底也是插入排序的变种 function shellSort(array){ var stepArr = [1750, 701, 301, 132, 57, 23, 10, 4, 1]; // reverse()在维基上看到这个最优的步长较小数组 var i = 0; var stepArrLength = stepArr.length; var len = array.length; var len2 = parseInt(len/2); for(;i < stepArrLength; i++){
if(stepArr[i] > len2){ continue; } stepSort(stepArr[i]); } // 排序一个步长 function stepSort(step){ //console.log(step) 使用的步长统计 var i = 0, j = 0, f, tem, key; var stepLen = len%step > 0 ? parseInt(len/step) + 1 : len/step; for(;i < step; i++){// 依次循环列 for(j=1;/*j < stepLen && */step * j + i < len; j++){//依次循环每列的每行 tem = f = step * j + i; key = array[f]; while((tem-=step) >= 0){// 依次向上查找 if(array[tem] > key){ array[tem+step] = array[tem]; }else{ break; } } array[tem + step ] = key; } } } return array; } /*快速排序*/ 其实说到底快速排序算法就系对冒泡排序的一种改进,采用的就是算法理论中的分治递归的思想,说得明白点,它的做法就是:通过一 趟排序将待排序的纪录分割成两部分,其中一部分的纪录值比另外一部分的纪录值要小,就可以继续分别对这两部分纪录进行排序;不 段的递归实施上面两个操作,从而实现纪录值的排序。 这么说可能不是很清晰,直接上代码: 原理图:
/*冒泡法*/ function bullSort(array){ var temp; for(var i=0;ii;j--){ if(array[j]
/*js 递归实现方案*/ 递归函数是在一个函数通过调用自身的情况下去解决的: 方式如下: function factorial(num){ if(num<=1){ return 1; }else{ return num*factorial(num-1); } } 但是这在 js 里面可能会出现错误: var anotherFactorial = factorial; factorial=null; alert(anoterFactorial(4)); 因为在调用 anoterFactorial 时内部的 factorial 已经不存在了。 解决方法是通过 arguments.callee 来解决。 如下: function factorial(num){ if(num<=1){ return 1; }else{ return num*arguments.callee(num-1); } var anotherFactorial = factorial; factorial = null; alert(anotherFactorial(4)); 成功!!!! } /**js 模拟多线程**/ emu -- 用 command 模式模拟多线程