利用js来实现一些常用的算法
示例代码中的arr指的是给出的数组,s指的是数组的起始坐标0,end指的是数组的最后一个坐标arr.length-1,n指的是要查找的数字
查找某个值:
1.线性法
function findInArr(arr,item){
for(var i=0;i<arr.length;i++){
if(arr[i]==item){
return true;
}
}
return false;
}
2.二分法
function findInArr(n,s,e){
//n为查找数字,s为起始位置下标0,e为结束为止下标arr.length-1
if(s>e){
return fasle;
}else if(s==e){
if(arr[s]==n){
return true;
}else{
return false;
}
}
//这里的数组arr是已经从小到大排过序的数组
var c=Math.floor((s+e)/2);
if(arr[c]==n){
return true;
}else{
if(n<arr[c]){
return findInArr(n,s,c);
}else{
return findInArr(n,c+1,e);
}
}
}
查找最小值:
var arr=[1,28,47,53,68,108,200];
function findMin(s,e){
//s,e为数组下标start,end
if(s>e){
return null;
}else if(s==e){
return arr[s];
}else if(s==e-1){
if(arr[s]<arr[e]){
return arr[s];
}else{
return arr[e];
}
}
var c=Math.floor((s+e)/2);
var l=findMin(s,c);
var r=findMin(c+1,e);
if(l<r){
return l;
}else{
return r;
}
}
去重:
function findInArr(arr,n){
for(var i=0;i<arr.length;i++){
if(arr[i]==n){
return true;
}
}
return false;
}
function removeDup(arr,s,e){
if(s>e){
return [];
}else if(s==e){
return [arr[s]];
}
var c=Math.floor((s+e)/2);
var l=removeDup(arr,s,c);
var r=removeDup(arr,c+1,e);
while(r.length){
if(findInArr(l,r[0])){
r.shift();
}else{
l.push(r.shift());
}
}
return l;
}
排序:
1.二分法
function mySort(arr,s,e){
if(s>e){
return [];
}else if(s==e){
return [arr[s]];
}else if(s=e-1){
if(arr[s]<arr[e]){
return [arr[s],arr[e]];
}else{
return [arr[e],arr[s]];
}
}
var c=Math.floor((s+e)/2);
var l=mySort(arr,s,c);
var r=mySort(arr,c+1,e);
var aResult=[];
while(l.length||r.length){
if(l[0]<right[0]){
aResult.push(l.shift());
}else{
aResult.push(r.shift());
}
if(l.length==0){
aResult=aResult.concat(r);
break;
}else if(r.length==0){
aResult=aResult.concat(l);
break;
}
}
return aResult;
}
2.冒泡排序
function bubbleSort(arr){
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr.length;j++){
if(arr[j+1]<arr[j]){
var c = arr[j+1];
arr[j+1] = arr[j];
arr[j] = c;
}
}
}
return arr;
}
3.选择排序
function findArr(arr,start){
var iMin = arr[start];
var iMinIndex = start;
for(var i=start;i<arr.lengthli++){
if(arr[i]<iMin){
iMin=arr[i];
iMinIndex=i;
}
}
return iMinIndex;
}
function selectionSort(arr){
for(var i=0;i<arr.length;i++){
var index=findMin(arr,i);
var c;
c=arr[index];
arr[index]=arr[i];
arr[i]=c;
}
return arr;
}
4.归并排序
function mergeSort(arr,s,e){
if(s>e){
return [];
}else if(s==e){
return [arr[s]];
}else if(s==e-1){
if(arr[s]<arr[e]){
return [arr[s],arr[e]];
}else{
return [arr[e],arr[s]];
}
}
var c = Math.floor((s+e)/2);
var left = mergeSort(arr,s,c);
var right = mergeSort(arr,c+1,e);
var aResult = [];
while(left.length||right.length){
if(left[0]<right[0]){
aResult.push(left.shift());
}else{
aResult.push(right.shift());
}
if(left.length==0){
aResult = aResult.concat(right);
break;
}else if(right.length==0){
aResult = aResult.concat(left);
break;
}
}
return aResult;
}
5.快速排序
function quickSort(arr,s,e){
if(arr.length==0){
return [];
}
var n = Math.floor((s+e)/2);
var c = arr.splice(n,1);
var left = [];
var right = [];
for(var i=0;i<arr.length;i++){
if(arr[i]<c[0]){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left,0,left.length-1).concat(c,quickSort(right,0,right.length-1))
}
利用js来实现一些常用的算法的更多相关文章
- javascript常用经典算法实例详解
javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与 ...
- 转载部长一篇大作:常用排序算法之JavaScript实现
转载部长一篇大作:常用排序算法之JavaScript实现 注:本文是转载实验室同门王部长的大作,找实习找工作在即,本文颇有用处!原文出处:http://www.cnblogs.com/ywang172 ...
- 利用JS脚本通过getAttribute()和setAttribute()等对CSS样式进行操作
HTML中引入CSS样式的方式有三种: 1.最常用的,引入样式表,在样式表中编写样式,引入方式如下:<link href="css/style.css" rel=" ...
- 面试中常用排序算法实现(Java)
当我们进行数据处理的时候,往往需要对数据进行查找操作,一个有序的数据集往往能够在高效的查找算法下快速得到结果.所以排序的效率就会显的十分重要,本篇我们将着重的介绍几个常见的排序算法,涉及如下内容: 排 ...
- 常用排序算法java实现
写在前面:纸上得来终觉浅.基本排序算法的思想,可能很多人都说的头头是到,但能说和能写出来,真的还是有很大区别的. 今天整理了一下各种常用排序算法,当然还不全,后面会继续补充.代码中可能有累赘或错误的地 ...
- Python实现常用排序算法
Python实现常用排序算法 冒泡排序 思路: 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完 ...
- 第四百一十五节,python常用排序算法学习
第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...
- Java常用排序算法及性能测试集合
测试报告: Array length: 20000 bubbleSort : 573 ms bubbleSortAdvanced : 596 ms bubbleSortAdvanced2 : 583 ...
- js混淆代码还原-js反混淆:利用js进行赋值实现
js混淆代码还原-js反混淆:利用js进行赋值实现 [不想用工具的直接看方法二] 本文地址:http://www.cnblogs.com/vnii/archive/2011/12/14/22875 ...
随机推荐
- 更新mac自带的python
mac lion自带的python是2.7版本的,有点儿低,要使用一些应用的时候还需要3.3以上的,这时可以用以下的方法更新mac自带的python. 先去python的官网下载最新的python,并 ...
- Date Format, 时间戳格式化
// 对Date的扩展,将 Date 转化为指定格式的String // 月(M).日(d).小时(h).分(m).秒(s).季度(q) 可以用 1-2 个占位符, // 年(y)可以用 1-4 个占 ...
- ie F12开发工具出不来
IE的F12开发人员工具不显示问题: 按下F12之后,开发人员工具在桌面上看不到,但是任务栏里有显示.将鼠标放在任务栏的开发人员工具上,出现一片透明的区域,选中之后却出不来.将鼠标移动到开发人员工具的 ...
- 十六款值得关注的NoSQL与NewSQL数据库--转载
原文地址:http://tech.it168.com/a2014/0929/1670/000001670840_all.shtml [IT168 评论]传统关系型数据库在诞生之时并未考虑到如今如火如荼 ...
- String StringBuilder以及StringBuffer
例一:[看了威哥视频,下面更好理解] package sunjava; public class String_test { public static void main(String[] args ...
- HBase-配置说明
转载自:http://www.aboutyun.com/thread-7914-1-1.html hbase.rootdir这个目录是region server的共享目录,用来持久化Hbase.UR ...
- Eclipse插件的安装方法
转自:http://blog.csdn.net/zhangyabinsky/article/details/7043435 Eclipse插件的安装有两种方法 :一个是在线安装,另一个就是手动安装. ...
- poj1328解题报告(贪心、线段交集)
POJ 1328,题目链接http://poj.org/problem?id=1328 题意: 有一海岸线(x轴),一半是陆地(y<0).一半是海(y>0),海上有一些小岛(用坐标点表示P ...
- javaweb学习总结二十(http响应)
一:http响应 1:http响应的组成部分 状态行.响应头.空行.响应数据 2:状态行 常用状态码: 200:请求成功 302:请求路径已经转移,请访问别的地址 307或者304: 请访问缓存信息 ...
- LeetCode 342
Power of Four Given an integer (signed 32 bits), write a function to check whether it is a power of ...