利用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 ...
随机推荐
- Educational Codeforces Round 2 B. Queries about less or equal elements 水题
B. Queries about less or equal elements Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforc ...
- Codeforces Bubble Cup 8 - Finals [Online Mirror]H. Bots 数学
H. Bots Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/575/problem/H Desc ...
- Android常用代码集合
这篇文章主要记录一些常用的一些代码段,方便以后查阅,不断更新中. 1:调用浏览器,载入某网址 1 2 3 Uri uri = Uri.parse("http://www.android-st ...
- [MODX] 3. Placeholder +
A chunk may be used in many pages, different page may require different style. We can use Placeholde ...
- HOW MYSQL USES INTERNAL TEMPORARY TABLES
HOW MYSQL USES INTERNAL TEMPORARY TABLES Table of Contents [hide] 1)UNION queries 2)Some views 3)SQL ...
- C++之运算符重载(1)
在前一节中曾提到过,C++中运行时的多态性主要是通过虚函数来实现的,而编译时的多态性是由函数重载和运算符重载来实现的.这一系列我将主要讲解C++中有关运算符重载方面的内容.在每一个系列讲解之前,都会有 ...
- VBA Excel 常用 自定义函数
1. 将 互换 Excel 列号(数字/字母) Public Function excelColumn_numLetter_interchange(numOrLetter) As String Dim ...
- php中序列化与反序列化在utf8和gbk编码中测试
在php中如果我们统一编码是没有什么问题了,但是很多朋友会发现一个问题就是utf8和gbk编码中返回的值会有所区别: php 在utf8和gbk编码下使用serialize和unserialize互相 ...
- 通过java实现对数据库的增删改查
package cn.hncu; import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet; ...
- alfresco 5.0 document
http://docs.alfresco.com/community/tasks/imagemagick-config.html