js里一些经典的算法
//1.找出某个数字在一组数组内的存不存在 如果存在 找出他所在的索引。
function indexOf(arr,item){
var i;
if(Array.prototype.indexOf){
return arr.indexOf(item);
}else{
for(i=0;i<arr.length;i++){
if(arr[i] == item){
return i;
}
}
}
}
// console.log(indexOf([1,2,3,4,5],3));
//2.计算数组arr中所有元素的总和。
function sum(arr){
var i;
var all=0;
for(i=0;i<arr.length;i++){
all +=arr[i];
}
return all;
}
// console.log(sum([1,2,3,4]));
//3.移除数组arr中与item相等的元素 不直接修改数组arr 结果反回新的数组
function remove(arr,item){
var i;
var newarry = new Array;
for(i=0;i<arr.length;i++){
if(arr[i] !==item){
newarry.push(arr[i]);
}
}
return newarry;
cl
}
// console.log(remove([1,2,3,1,5,6],1));
//splice(index1,index2)方法, 第一个参数表示要删除的哪个 ,第二个表示删除几个.
function removeWithoutCopy(arr, item) {
for(var i=0;i<arr.length;i++){
if(arr[i] == item){
arr.splice(i,1)
i--;
}
}
return arr;
}
// console.log(removeWithoutCopy([1,2,3,2,2,2,4,5],2));
//4.把一个元素添加到一个数组内。
function append(arr,item){
var i=0;
var newArray =[];
for(i=0;i<arr.length;i++){
newArray.push(arr[i]);
}
newArray.push(item);
return newArray;
}
// console.log(append([1,2,3,4],5)); 1,2,3,4,5
//5.去掉一个数组中的最后一位元素 。
function truncate(arr) {
var lastIndex = arr.length-1;
return arr.slice(0,lastIndex);
}
//console.log(truncate([2,3,6,7,9]));
//6.在数组 arr 开头添加元素 item。
function prepend(arr,item){
return [item].concat(arr);
}
// console.log(prepend([1,2,3,4],5)); //5,1,2,3,4
//7. 删除数组arr第一个元素。
function curtail(arr){
var i = 0;
var newArray = [];
for(i=0;i<arr.length;i++){
if(arr[i] !== arr[0]){
newArray.push(arr[i]);
}
}
return newArray;
}
// console.log(curtail([1,2,3,4])); 2,3,4
//8. 合并2个数组
function concat(arr1,arr2){
return arr1.concat(arr2);
}
// console.log(concat([1,2,3],[4,5,6])); 1,2,3,4,5,6
//9.在数组 arr 的 index 处添加元素 item。
function insert(arr,item,index){
var newArr = arr.slice(0);
newArr.splice(index,0,item);
return newArr;
}
// console.log(insert([1,2,3,4],'a',2));
//10.统计数组中 某元素出现的次数.
function count(arr,item){
var index = 0;
var i =0;
for(i;i<arr.length;i++){
if(arr[i] == item){
index++;
}
}
return index;
}
// console.log(count([1,2,3,4,4,4,6],4));
//11. 找出数组 arr 中重复出现过的元素
function duplicates(arr){
//a数组用来存结果 b数组用来存arr的结果
var a=[],b=[];
var i;
for(i=0;i<arr.length;i++){
if(!b[arr[i]]){
b[arr[i]] = 1;
continue;
}
b[arr[i]]++;
}
for(i=0;i<b.length;i++){
if(b[i] > 1){
a.push(i);
}
}
return a;
}
//console.log(duplicates([1,2,2,2,2,2,4,4,5,3,4]));
//12. 求一个数组内所有元素的各个平方
function square(arr) {
var newArr =[];
var i;
for(i =0;i<arr.length;i++){
newArr.push(Math.pow(arr[i],2));
}
return newArr;
}
//console.log(square([2,3,4,5]));
//13. 查找item在一个字符串中出现的所有位置
//查找target的位置,只需要将数组arr中键值对key-value中value == target的key找出来存到新数组而已。因此,遍历arr,如果target == arr[i],i即目标值位置,则将i加入到a数组中。
function findAllOccurrences(arr, item) {
var newArr = [];
var i
for(i=0;i<arr.length;i++){
if(arr[i] == item){
newArr.push(i);
}
}
return newArr;
}
// console.log(findAllOccurrences([1,2,3,2,3,2],2));
//1、从 start 到 end(包含 start 和 end),每隔 100 毫秒 console.log 一个数字,每次数字增幅为 1
//2、返回的对象中需要包含一个 cancel 方法,用于停止定时操作
//3、第一个数需要立即输出
function count(start,end){
console.log(start++);
var timer = setInterval(function(){
if(start <= end){
console.log(start++);
}else{
clearInterval(timer);
}
},100);
//反一个对象
return{
cancel : function(){
clearInterval(timer);
}
};
}
//count(100,110);
// 实现 fizzBuzz 函数,参数 num 与返回值的关系如下:
//1、如果 num 能同时被 3 和 5 整除,返回字符串 fizzbuzz
//2、如果 num 能被 3 整除,返回字符串 fizz
//3、如果 num 能被 5 整除,返回字符串 buzz
//4、如果参数为空或者不是 Number 类型,返回 false
//5、其余情况,返回参数 num
function fizzBuzz(num) {
if(num % 3 == 0 && num % 5==0){
return 'fizzbuxz';
}else if(num % 3 ==0){
return 'fizz';
}else if(num % 5 ==0){
return 'buzz';
}else if(num ==null || typeof num !== 'number'){
return false;
}else{
return num;
}
};
//console.log(fizzBuzz(3));
function hasStr(str){
var b = /\b/;
return b.test(str);
}
// console.log(hasStr("abc123"));
//冒泡排序
/*
冒泡排序的原理是这样的,比方说有五个数字54321,要按从小到大排列;
首先比较前两个,就是5和4,如果第一个小于第二个,不做操作,如果第一个大于第二个,那么交换二者的位置,即变成45321,然后比较第二个和第三个,交换位置,变成43521,然后第三个和第四个,第四个和第五个,这样一次循环下来,变成43215
所以,一层循环的效果就是挑出最大的一个数字5,冒泡到最后面。但是还要挑出第二大,第三大的数字,等等。所以一层循环根本就不够用,必须再套一层才行。像这个例子,五个数字,起码要进行四轮循环才行。至于为什么要this.length-i,是因为第一次比较五个数字,第二个只要比较前四个就行了,第五个肯定是最大的了
*/
function maopaoSort(arr){
var temp = 0;
for (var i = 0; i < arr.length; i++){
for (var j = 0; j < arr.length - i; j++){
if (arr[j] > arr[j + 1]){
temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
return arr;
}
//console.log(maopaoSort( [5, 4, 3, 2, 1]));
//正常排序方法 -正序
function addSortP(a,b){
return a -b;
}
function arrA(arr){
return arr.sort(addSortP);
}
console.log(arrA([1,4,5,6,2,3]));
//正常排序方法 -反序
function add(a,b){
return b-a;
}
function arrB(arr){
return arr.sort(add);
}
console.log(arrB([1,4,5,6,2,3]));
js里一些经典的算法的更多相关文章
- js实现四大经典排序算法
为了方便测试,这里写了一个创建长度为n的随机数组 function createArr(n) { var arr = []; while (n--) { arr.push(~~(Math.random ...
- js的简单的逻辑算法题
比如题目:寻找1~1000之内,所有能被5整除.或者能被6整除的数字 1 for(var i = 1 ; i <= 1000 ; i++){ 2 if(i % 5 == 0 || i % 6 ...
- 经典排序算法总结与实现 ---python
原文:http://wuchong.me/blog/2014/02/09/algorithm-sort-summary/ 经典排序算法在面试中占有很大的比重,也是基础,为了未雨绸缪,在寒假里整理并用P ...
- 经典排序算法及python实现
今天我们来谈谈几种经典排序算法,然后用python来实现,最后通过数据来比较几个算法时间 选择排序 选择排序(Selection sort)是一种简单直观的排序算法.它的工作原理是每一次从待排序的数据 ...
- 经典排序算法 - 基数排序Radix sort
经典排序算法 - 基数排序Radix sort 原理类似桶排序,这里总是须要10个桶,多次使用 首先以个位数的值进行装桶,即个位数为1则放入1号桶,为9则放入9号桶,临时忽视十位数 比如 待排序数组[ ...
- 经典排序算法 - 归并排序Merge sort
经典排序算法 - 归并排序Merge sort 原理,把原始数组分成若干子数组,对每个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到所有合并完,形成有序的数组 举例 无序数组[6 2 ...
- 前端要革命?看我在js里写SQL
在日新月异的前端领域中,前端工程师能做的事情越来越多,自从nodejs出现后,前端越来越有革了传统后端命的趋势,本文就再补一刀,详细解读如何在js代码中执行标准的SQL语句 为什么要在js里写SQL? ...
- Jerry 2017年的五一小长假:8种经典排序算法的ABAP实现
2017年4月29日~5月1日,国际劳动节, 三天的小长假. 在国内,小长假往往是这样的: 然而我当时在戏称为"德村"(德国农村)的Walldorf出差并且住在Wiesloch, ...
- 【最全】经典排序算法(C语言)
算法复杂度比较: 算法分类 一.直接插入排序 一个插入排序是另一种简单排序,它的思路是:每次从未排好的序列中选出第一个元素插入到已排好的序列中. 它的算法步骤可以大致归纳如下: 从未排好的序列中拿出首 ...
随机推荐
- mysql 游标最后一行 重复问题
BEGINdeclare p_id INT;declare p_Code INT default 0;declare p_Logo INT default 0;declare p_Name varch ...
- C++ 我想这样用(七)
话接前篇,继续基于对象编程语法的剩余部分: 6.类的const成员函数和const对象 const数据成员:跟const常量一样,只是一个在类里(而且是在构造函数里),一个在类外而已,都必须初始化. ...
- nginx配置pathinfo支持,最佳方案 - chunyu
〇. 前言 pathinfo有两个,1 pathinfo()函数,2 $_SERVER['PATH_INFO'].pathinfo()是php的库函数,原生支持不需要nginx配置,$_SERVER[ ...
- ES6学习(2)——arrows箭头函数
Arrows => 箭头函数 箭头函数,若有了解过coffeeScript的同学,或许对此印象深刻,因为它可以让语法省略不少,特别是对于回调函数,会让代码更清晰简洁. expression 让我 ...
- struts2+Hibernate4+spring3+EasyUI环境搭建之二:搭建spring
三.搭建spring3 1.引入spring3依赖 <!-- spring3 --> <dependency> <groupId>org.springframewo ...
- 第八章、Linux 磁盘与文件系统管理
认识 EXT2 文件系统 Linux最传统的磁盘文件系统(filesystem)使用的是EXT2这个啦!所以要了解文件系统就得要由认识EXT2开始! 而文件系统是创建在硬盘上面的,因此我们得了解硬盘的 ...
- Flask框架获取用户IP地址的方法
本文实例讲述了python使用Flask框架获取用户IP地址的方法.分享给大家供大家参考.具体如下: 下面的代码包含了html页面和python代码,非常详细,如果你正使用Flask,也可以学习一下最 ...
- HDU 1255 覆盖的面积 (线段树+扫描线+离散化)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1255 题意很清楚,就是让你求矩阵之间叠加层数大于1的矩形块的面积和. 因为n只有1000,所以我离散化 ...
- [c++]程序的内存划分理解
全局和静态数据区:用于存放全局变量和静态变量(全局变量和局部变量) 常量数据区:用于存放常量数据 代码区:用于存储代码 栈:用于局部变量和函数参数 堆:程序员申请(程序员控制的部分,new/delet ...
- Oracle数据库文件恢复与备份思路
怎样才能对Oracle数据库进行备份?如何才能对删除的数据再进行恢复?这是困扰着很多人的问题.大家都知道,任何数据库在长期使用过程中,都会存在一定的安全隐患.对于数据库管理员来说不能仅寄希望于计算机操 ...