欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    常见算法是js实现汇总.docx

    • 资源ID:14435398       资源大小:62.75KB        全文页数:23页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    常见算法是js实现汇总.docx

    1、常见算法是js实现汇总常见算法是js实现汇总 /*去重*/function delRepeat(arr)var newArray=new Array();var len=arr.length;for(var i=0;ilen;i+) for(var j=i+1;jlen;j+) if(arri=arrj) +i; newArray.push(arri);return newArray;var arr=new Array(red,red,1,5,2);alert(delRepeat(arr);/*二分法*/又称为折半查找算法,但是有缺陷就是要求数字是预先排序好的function binary(i

    2、tems,value)var startIndex=0, stopIndex=items.length-1, midlleIndex=(startIndex+stopIndex)1; while(itemsmiddleIndex!=value & startIndexvalue) stopIndex=middleIndex-1; else startIndex=middleIndex+1; middleIndex=(startIndex+stopIndex)1; return itemsmiddleIndex!=value ? false:true;/*十六进制颜色值的随机生成*/functi

    3、on randomColor()var arrHex=0,2,3,4,5,6,7,8,9,a,b,c,d, strHex=#, index; for(var i=0;i6;i+) index=Math.round(Math.random()*15); strHex+=arrHexindex; return strHex;/*一个求字符串长度的方法*/function GetBytes(str)var len=str.length, bytes=len;for(var i=0;i255) bytes+; return bytes;/*插入排序*/所谓的插入排序,就是将序列中的第一个元素看成一个有

    4、序的子序列,然后不段向后比较交换比较交换。-华丽丽的分割线-function insertSort(arr) var key; for(var j = 1; j = 0 & arri key) arri + 1 = arri; i -; arri + 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,

    5、 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 len2) continue; stepSort(stepArri); / 排序一个步长 function stepSort(step) /console.log(step) 使用的步长统计 var i = 0, j = 0, f, tem, key; var stepL

    6、en = len%step 0 ? parseInt(len/step) + 1 : len/step; for(;i step; i+)/ 依次循环列 for(j=1;/*j stepLen & */step * j + i = 0)/ 依次向上查找 if(arraytem key) arraytem+step = arraytem; else break; arraytem + step = key; return array;/*快速排序*/其实说到底快速排序算法就系对冒泡排序的一种改进,采用的就是算法理论中的分治递归的思想,说得明白点,它的做法就是:通过一趟排序将待排序的纪录分割成两部

    7、分,其中一部分的纪录值比另外一部分的纪录值要小,就可以继续分别对这两部分纪录进行排序;不段的递归实施上面两个操作,从而实现纪录值的排序。这么说可能不是很清晰,直接上代码:function sort(arr) return quickSort(arr,0,arr.length-1); function quickSort(arr,l,r) if(lr) var mid=arrparseInt(l+r)/2),i=l-1,j=r+1; while(true) /大的放到右边,小的放到左边, i与j均为游标 while(arr+imid); if(i=j)break;/判断条件 var temp =

    8、 arri; arri=arrj; arrj=temp; quickSort(arr,l,i-1); quickSort(arr,j+1,r); return arr; function main()var list=new Array(49,38,65,97,76,13,27);document.write(sort(list).valueOf();main();原理图:/*冒泡法*/function bullSort(array)var temp;for(var i=0;ii;j-) if(arrayjarrayj-1) temp = arrayj; arrayj=arrayj-1; ar

    9、rayj-1=temp; return array;/*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来解

    10、决。如下:function factorial(num)if(num=1) return 1;elsereturn num*arguments.callee(num-1); var anotherFactorial = factorial;factorial = null;alert(anotherFactorial(4);成功!/*js模拟多线程*/emu - 用command模式模拟多线程!-if (Array.prototype.shift=null)Array.prototype.shift = function () var rs = this0; for (var i=1;ithi

    11、s.length;i+) thisi-1=thisi this.length=this.length-1 return rs;if (Array.prototype.push=null)Array.prototype.push = function () for (var i=0;iarguments.length;i+) thisthis.length=argumentsi; return this.length;var commandList = ;var nAction = 0;/控制每次运行多少个动作var functionConstructor = function().constr

    12、uctor;function executeCommands() for (var i=0;i0) var command = commandList.shift(); if (command.constructor = functionConstructor) if (command.scheduleTime = null | new Date()-command.scheduleTime0) command(); else commandList.push(command); function startNewTask() var resultTemp = document.getElem

    13、entById(sampleResult).cloneNode(true); with (resultTemp) id=;style.display=block;style.color=(Math.floor(Math.random()* (123).toString(16)+00000).substring(0,6); document.body.insertBefore(resultTemp,document.body.lastChild); commandList.push(function()simThread(resultTemp,1);); nAction+;function si

    14、mThread(temp,n) if (temp.stop) n-; else temp.innerHTML = temp.innerHTML - (-n); if (n开始新线程0/*选择法排序*/选择法主要有三种:1简单的选择排序:简单的前后交互。/*简单选择法排序*/其实基本的思想就是从待排序的数组中选择最小或者最大的,放在起始位置,然后从剩下的数组中选择最小或者最大的排在这公司数的后面。http:/zh.wikipedia.org/wiki/%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8Ffunction selectionSort(data) var i, j

    15、, min, temp , count=data.length; for(i = 0; i count - 1; i+) /* find the minimum */ min = i; for (j = i+1; j count; j+) if (dataj datamin) min = j; /* swap datai and datamin */ temp = datai; datai = datamin; datamin = temp; return data;2树型排序:又称锦标赛排序,首先对n个元素进行两两比较,然后在其中n/2个较小者再进行两两比较如此重复直至选出最小的关键字的纪录

    16、为止。(可用完全二差树表示)。缺点:辅助空间需求过大,和“最大值”进行多余比较3堆排序:(不适用于纪录数较少的文件)堆排序算法的过程如下:1)得到当前序列的最小(大)的元素2)把这个元素和最后一个元素进行交换,这样当前的最小(大)的元素就放在了序列的最后,而原先的最后一个元素放到了序列的最前面3)的交换可能会破坏堆序列的性质(注意此时的序列是除去已经放在最后面的元素),因此需要对序列进行调整,使之满足于上面堆的性质.重复上面的过程,直到序列调整完毕为止.js实现:/* 堆排序* param items 数组* return 排序后的数组*/ function heapSort(items) i

    17、tems = array2heap(items); /将数组转化为堆 for(var i = items.length - 1; i = 0; i-) items = swap(items, 0, i); /将根和位置i的数据交换(用于将最大值放在最后面) items = moveDown(items, 0, i - 1); /数据交换后恢复堆的属性 return items; /* 将数组转换为堆* param items 数组* return 堆*/ function array2heap(items) for(var i = Math.ceil(items.length / 2) - 1

    18、; i = 0; i-) items = moveDown(items, i, items.length - 1); /转换为堆属性 return items; /* 转换为堆* param items 数组* param first 第一个元素* param last 最后一个元素* return 堆*/ function moveDown(items, first, last) var largest = 2 * first + 1; while(largest = last) if(largest last & itemslargest itemslargest + 1) largest

    19、+; if(itemsfirst itemslargest) items = swap(items, first, largest); / 交换数据 first = largest; /往下移 largest = 2 * first + 1; else largest = last + 1; /跳出循环 return items; /* 交换数据* param items 数组* param index1 索引1* param index2 索引2* return 数据交换后的数组*/ function swap(items, index1, index2) var tmp = itemsin

    20、dex1; itemsindex1 = itemsindex2; itemsindex2 = tmp; return items; var a = 345,44,6,454,10,154,3,12,11,4,78,9,0,47,88,9453,4,65,1,5; document.write(heapSort(a);所谓归并就是将两个或者两个以上的有序表合成一个新的有序表。递归形式的算法在形式上较为简洁但实用性较差,与快速排序和堆排序相比,归并排序的最大特点是,它是一种稳定的排序方法。js实现归并:function MemeryArray(Arr,n, Brr, m) var i, j, k; var Crr=new Array(); i = j = k = 0; while (i n & j m) if (Arri Brrj) Crrk+ = Arri+; else Crrk+ = Brrj+; while (i n) Crrk+ = Arri+; while (j m)


    注意事项

    本文(常见算法是js实现汇总.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开