JavaScript基础(四) ---- 算法
来源:互联网 发布:李维斯淘宝店 编辑:程序博客网 时间:2024/06/14 22:04
1. 快速排序
思路:
1. 先从这个数组中取出中间一项的位置;2. 取到这个中间位置对应的值;3. 拿数组中的每一项,跟中间值进行比较;如果比他小,放左边的数组; 如果比他大,就放右边的数组;4. 什么时候停止切分: 数组的长度<=1;
代码:
var ary=[21,8,5,34,9];function quickSort(ary){ //1.判断是否符合切割条件,如果不符合,直接返回; if(ary.length<=1){ return ary; } //2.符合切割条件 //1)取中间位置; var num=Math.floor(ary.length/2); //2)取中间值并且要对原数组造成影响 var numValue=ary.splice(num,1)[0];//这里是一个数字 //3)拿数组中的每一项跟中间值numValue进行比较,比他小,放left数组,反之,放right数组; var left=[]; var right=[]; for(var i=0; i<ary.length; i++){ var cur=ary[i]; if(cur<numValue){ left.push(cur); }else{ right.push(cur); } } return quickSort(left).concat([numValue],quickSort(right)); }console.log(quickSort(ary))
2. 插入排序
思路:
1.left=[4,5,8,21,32]2.拿数组中的每一项,跟左手中的每一项,从后往前的进行比较: 如果比左手中的牌大,应该放在左手这张牌的后面(放在这张牌的下一张牌的前面) 如果比左手中的牌小,,继续往左边比较,比较到索引===-1;还是小的话,插入到left最前面;return left;
代码:
var ary=[21,8,5,34,9]; function insertSort(ary){ //1.先给左手一张牌,这个牌数组中 var left=ary.splice(0,1); //2.拿数组中的每一项跟左手中的每一项进行比较(从后往前的比较) for(var i=0; i<ary.length; i++){//数组 var cur=ary[i];//数组中的每一项; for(var j=left.length-1; j>=0;){//4 左手 var nex=left[j];//代表左手中的每一项; if(cur<nex){//数组中的某一项,比左手牌小; j--; if(j===-1){//说明已经比到左手第一张牌了,而且还比他小,应该插入左手第一张牌的最前面; left.unshift(cur); } }else{ left.splice(j+1,0,cur); break; } } } return left; }
3. 冒泡排序
思路:
//var ary=[21,8,5,34,9];第一轮:比较4次;虽然没有实现最终目标,但是已经把最大值放在数组的末尾; [8,21,5,34,9] [8,5,21,34,9] [8,5,21,34,9] [8,5,21,9,34]第二轮:比较3次;虽然没有实现最终目标,但是把次大值数组的后面 [5,8,21,9,34] [5,8,21,9,34] [5,8,9,21,34]第三轮:比较2次; [5,8,9,21,34]第四轮:比较1次;第五轮:比较0次;
代码:
var ary=[21,8,5,34,9];for(var i=0; i<ary.length; i++){//比较的轮数 for(var j=0; j<ary.length-i-1;j++){//比较多少次 //每次比较都是拿当前项跟后一项进行比较;如果当前项大于后一项,他两换位置 if(ary[j]>ary[j+1]){ var tmp=ary[j+1]; ary[j+1]=ary[j]; ary[j]=tmp; } } } console.log(ary);
递归算法
使用callee实现自己调用自己,金典递归 n!
function fact(num) { if (num <= 1) { return 1; } else { return num * arguments.callee(num - 1); //此处更改了。 } } var anotherFact = fact; fact = null; alert(antherFact(4)); //结果为24.
阅读全文
0 0
- JavaScript基础(四) ---- 算法
- JavaScript-基础(四)
- JavaScript入门基础(四)
- JavaScript基础部分(四)
- javascript 基础(四)DOM
- Javascript算法练习(四)
- Javascript(四)Javascript基础(对象)
- 基础算法(四)---Dijkstra算法
- 基础算法(四)---动态规划算法
- JavaScript基础(四)jQuery(一)
- JavaScript基础(四)jQuery(二)
- JAVASCRIPT学习笔记基础(四)
- javascript基础之四(数组详解)
- (四)JavaScript锻炼基础小练习
- Javascript基础知识点轨迹(四)
- JavaScript基础(四) 之分支结构
- javascript基础(四) 个人笔记
- javascript(基础整理四)
- 字符串匹配正则表达式的写法
- Ubuntu下安装CodeBlocks
- Android快速调试重启
- MFC读写ini文件方法
- iOS 设置cell的在tableView中的间隔距离
- JavaScript基础(四) ---- 算法
- 菜鸟简单理解java中使用接口的意义
- struts2如何访问HttpServletRequest、HttpSession、ServletContext三个域对象?
- 2017oracle官网下载旧版本JDK
- jzoj3522 迷宫花园(bfs)
- Tornado 简介及其在Linux 和 Windows 下基础环境的搭建
- Hibernate开发底层公共接口
- 自定义返回结果类
- 欢迎使用CSDN-markdown编辑器