利用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 ...
随机推荐
- Ectouch修改虚拟销售数量的方法
1.参考:http://zhidao.baidu.com/link?url=5OEkRlKqtRcmnO6iyW2pq-gw1aj-1S6QdImmBkQZHHt6tcvT50aIf_1nibP3T6 ...
- Codeforces Round #172 (Div. 2) C. Rectangle Puzzle 数学题几何
C. Rectangle Puzzle Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/281/p ...
- [AngularJS] Html ngSanitize, $sce
Safely render arbitrary HTML snippets by using ngSanitize and $sce. By default angularJS consider us ...
- MySQL 行子查询(转)
MySQL 行子查询 行子查询是指子查询返回的结果集是一行 N 列,该子查询的结果通常是对表的某行数据进行查询而返回的结果集. 一个行子查询的例子如下: SELECT * FROM table1 WH ...
- SQL Server日期函数总结
获得一个月的天数:首先到得一个月最后一天的日期,通过 SQL Server 日期函数 day() 取得日期中的“天 ”部分 获得 2008 年 2 月份的天数:select day(cast('200 ...
- 对request.getSession(false)的理解(附程序员常疏忽的一个漏洞)--转
出处:http://blog.csdn.net/xxd851116/archive/2009/06/25/4296866.aspx [前面的话] 在网上经常看到有人对request.getSessio ...
- C# 之 Stream 和 byte[] 的相关转换
1.二进制转换为图片 MemoryStream ms = new MemoryStream(bytes); ms.Position = ; Image img = Image.FromStream(m ...
- 杂乱无章之javascript(一)
1.in 要求第一个(左边的)操作数必须是字符串类型或是可以转化成字符串类型的其他类型,而第二(右边的)操作数必须是数组或对象.只有第一个操作数的值是第二个操作数的属性名,才会返回true,否则返回f ...
- Android进阶笔记08:Android 中Activity、Window和View之间的关系
1. Android 中Activity.Window和View之间的关系(比喻): Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图) LayoutI ...
- Java设计模式11:常用设计模式之代理模式(结构型模式)
1. Java之代理模式(Proxy Pattern) (1)概述: 代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象 ...