常见算法JS实现
来源:互联网 发布:淘宝客如何设置佣金 编辑:程序博客网 时间:2024/06/03 04:01
本文参考:http://blog.csdn.net/hguisu/article/details/7776068
https://segmentfault.com/a/1190000008593715
一.排序算法
概述
排序有内部排序和外部排序。内部排序是数据记录在内存中进行排序;外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。
交换排序-冒泡排序(Bubble Sort)
1.基本思想:
在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数一次进行比较和调整,让较大的树往下沉,较小的往上冒。即每当相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。
2.排序图示:
3.算法实现:
function bubbleSort(arr) { var i = arr.length, j; var tempExchangVal; while (i > 0) { for (j = 0; j < i - 1; j++) { if (arr[j] > arr[j + 1]) { tempExchangVal = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tempExchangVal; } } i--; } return arr;}
交换排序-快速排序(Quick Sort)
1.基本思想:
(1)选择一个基准元素,通常选择第一个元素;
(2)通过一趟排序将待排序的记录分割成独立的两部分,其中一部分记录的元素值均比基准元素小,另一部分的元素值均比基准值大;
(3)分别对这两部分记录用同样的方法继续进行排序,直到整个序列有序;
2.排序图示:
(1)一趟排序过程:
(2)排序全过程:
3.算法实现:
function quickSort(array){ function sort(prev, numsize){ var i= prev; var j = numsize -1; var flag = array[prev]; if (numsize - prev > 1) { while(i < j){ for(; i < j; j--){ if (array[j] < flag) { array[i++] = array[j]; //a[i] = a[j]; i += 1; break; } } for( ; i < j; i++){ if (array[i] > flag){ array[j--] = array[i]; break; } } } array[i] = flag; sort(0, i); sort(i + 1, numsize); } } sort(0, array.length); return array;}
二.字符串操作
翻转字符串
1.思路:转换成array操作
2.实现
function reverseString(str){ var arr = str.split(""); var i = 0,j = arr.length-1,temp; while(i<j){ temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; i++; j--; } return arr.join("");}
生成指定长度随机字符串
1.实现
function randomString(n){ var str = 'abcdefghijklmnopqrstuvwxyz0123456789'; var temp = ''; for(var i=0; i<n; i++) { temp += str.charAt(Math.round(Math.random()*str.length)); } return temp;}
三.数组操作
数组去重
1.思路:遍历数组,然后将数组中的项放进一个对象中,通过判断该对象中是否存在某一项来判断数组是否重复。
2.实现
function unique(arr){ var obj = {} var result = [] for(var i in arr){ if(!obj[arr[i]]){ obj[arr[i]] = true; result.push(arr[i]); } } return result;}
四.树操作
遍历多叉树
1.实现var treeNodes = [ { id: 1, name: '1', children: [ { id: 11, name: '11', children: [ { id: 111, name: '111', children:[] }, { id: 112, name: '112' } ] }, { id: 12, name: '12', children: [] } ] }, { id: 2, name: '2', children: [ { id: 22, name: '22', children: [] } ] }];//递归实现var parseTreeJson = function(treeNodes){ if (!treeNodes || !treeNodes.length) return; for (var i = 0, len = treeNodes.length; i < len; i++) { console.log(treeNodes[i].id); var childs = treeNodes[i].children; if(childs && childs.length > 0){ parseTreeJson(childs); } }};//非递归广度优先实现var iterator1 = function (treeNodes) { if (!treeNodes || !treeNodes.length) return; var stack = [],item; //先将第一层节点放入栈 for (var i = 0, len = treeNodes.length; i < len; i++) { stack.push(treeNodes[i]); } while (stack.length) { item = stack.shift(); console.log(item.id); //如果该节点有子节点,继续添加进入栈底 if (item.children && item.children.length) { stack = stack.concat(item.children); } }};//非递归深度优先实现var iterator2 = function (treeNodes) { if (!treeNodes || !treeNodes.length) return; var stack = [],item; //先将第一层节点放入栈 for (var i = 0, len = treeNodes.length; i < len; i++) { stack.push(treeNodes[i]); } while (stack.length) { item = stack.shift(); console.log(item.id); //如果该节点有子节点,继续添加进入栈顶 if (item.children && item.children.length) { stack = item.children.concat(stack); } }};console.log('------------- 递归实现 ------------------');parseTreeJson(treeNodes);console.log('------------- 非递归广度优先实现 ------------------');iterator1(treeNodes);console.log('------------- 非递归深度优先实现 ------------------');iterator2(treeNodes);
五.其他常见算法
生成斐波那契数列
1.实现
function getFibonacci(n) { var fibarr = []; var i = 0; while(i < n) { if(i <= 1) { fibarr.push(i); } else { fibarr.push(fibarr[i - 1] + fibarr[i - 2]) } i++; } return fibarr;}
0 0
- 常见算法JS实现
- JS实现常见算法
- 前端常见算法js实现
- js实现常见排序算法
- 常见算法是js实现汇总
- 常见算法是js实现汇总
- js实现常见的排序算法
- 【转载】前端常见算法的JS实现
- 前端常见算法的JS实现
- 常见排序算法(js实现)
- 前端常见算法的JS实现
- JS常见算法8
- js 常见的算法
- JS常见算法
- JS数组常见算法
- JS 常见排序算法
- 常见算法的实现
- 常见的算法实现
- 复习android四大组件(一)
- windows系统与虚拟机中linux系统合作开发项目
- android 调出系统menu键
- 如何使用Carthage来管理iOS三方库
- C++ 默认初始化规则
- 常见算法JS实现
- 使用StringBuilder引用问题
- 世界上第一个编译器是被什么编译的?
- SSL工作原理
- 管道IO重定向
- PHP发送POST请求的三种方式
- HDU - 1087 Super Jumping! Jumping! Jumping! 解题报告
- 关于SharedPreferences简单工具类----(1)
- 递归算法