JS经典算法

JS经典算法:

// 1、字符串颠倒

str.split(‘‘).reverse().join(‘‘)

// 2、不借助中间量,颠倒a、b

a=[b,b=a][0]

// 3、快速获取数组的最大值、最小值

Array.prototype.max = function () {

return Math.max.apply(null, this)

}

Array.prototype.min = function () {

return Math.min.apply(null, this)

}

// 4、模拟数组的一些方法

// 4.0 先扩充类型的基本功能

Function.prototype.method = function (name, func) {

if (!this.prototype[name]) {

this.prototype[name] = func;

}

return this;

}

// 4.1 pop()方法:删除数组最后一个元素,并返回该元素

Array.method(‘pop‘, function () {

return this.splice(this.length - 1, 1)[0]

})

// 4.2 push()方法:在数组末尾添加元素,并返回新数组的长度

// Array.method(‘mypush‘, function () {

//     this.splice.apply(this, [this.length, 0]).

//         concact(Array.prototype.slice(arguments))

//     return this.length

// })

// 4.3 shift()方法:删除数组第一个元素,并返回该元素

Array.method(‘shift‘, function () {

return this.splice(0, 1)[0]

})

// 4.4 unshift()方法:在数组前面添加新元素,并返回该元素

Array.method(‘unshift‘, function () {

})

// 5、数组去重

// 5.1 利用对象判断去重

Array.prototype.fillRepeat = function () {

var result = []

var hash = {}

for (var i = 0; i < this.length; i++) {

if (hash[this[i]] === undefined) {

result.push(this[i])

}

hash[this[i]] = true

}

return result

}

// 5.2 利用数组下标去重

Array.prototype.fillRepeat = function () {

var result = []

for (var i = 0; i < this.length; i++) {

if (this.indexOf(this[i]) === i) {

result.push(this[i])

}

}

return result

}

// 5.3 先排序,后去重

Array.prototype.fillRepeat = function  {

var result = []

this.sort()

for (var i = 0; i < this.length; i++) {

if (this[i] !== result[result.length - 1]) {

result.push(this[i])

}

}

return result

}

// 6、数组排序

// 6.1 快速排序

function quickSort (arr) {

if (arr.length <= 1)  return arr

var lfArr = [], rtArr = [], q = arr[0]

for (var i = 1; i < arr.length; i++) {

if (arr[i] < q) {

lfArr.push(arr[i])

} else {

rtArr.push(arr[i])

}

}

return     quickSort(lfArr).concact(q, quickSort(rtArr))

}

// 6.2 冒泡排序

Array.prototype.bubbleSort = function () {

var tem;

for (var i =0; i < this.length -1; i++) {

for (var j = 0; j < this.length - i -1; j++) {

if (this[j] > this[j+1]) {

tem = this[j];

this[j] = this[j+1];

this[j+1] = tem;

}

}

}

return this;

}

// 6.3 根据不同的类型进行排序

by = function (a, b) {

if (a === b) return 0

if (typeof a === typeof b) {

return a < b ? -1 : 1

}

return typeof a < typeof b ? -1 : 1

}

原文地址:https://www.cnblogs.com/webenjoy/p/12162851.html

时间: 2024-08-24 05:04:42

JS经典算法的相关文章

javascript常用经典算法实例详解

javascript常用经典算法实例详解 这篇文章主要介绍了javascript常用算法,结合实例形式较为详细的分析总结了JavaScript中常见的各种排序算法以及堆.栈.链表等数据结构的相关实现与使用技巧,需要的朋友可以参考下 本文实例讲述了javascript常用算法.分享给大家供大家参考,具体如下: 入门级算法-线性查找-时间复杂度O(n)--相当于算法界中的HelloWorld ? 1 2 3 4 5 6 7 8 9 10 //线性搜索(入门HelloWorld) //A为数组,x为要

Python3入门机器学习 经典算法与应用

详情请交流  QQ  709639943 00.Python3入门机器学习 经典算法与应用 00.老司机学python篇:第一季(基础速过.机器学习入门) 00.Python 从入门到精通 78节.2000多分钟.36小时的高质量.精品.1080P高清视频教程!包括标准库.socket网络编程.多线程.多进程和协程. 00.Django实战之用户认证系统 00.Django实战之企业级博客 00.深入浅出Netty源码剖析 00.NIO+Netty5各种RPC架构实战演练 00.JMeter 深

数据挖掘十大经典算法

一. C4.5  C4.5算法是机器学习算法中的一种分类决策树算法,其核心算法是ID3 算法.   C4.5算法继承了ID3算法的优点,并在以下几方面对ID3算法进行了改进: 1) 用信息增益率来选择属性,克服了用信息增益选择属性时偏向选择取值多的属性的不足: 2) 在树构造过程中进行剪枝: 3) 能够完成对连续属性的离散化处理: 4) 能够对不完整数据进行处理. C4.5算法有如下优点:产生的分类规则易于理解,准确率较高.其缺点是:在构造树的过程中,需要对数据集进行多次的顺序扫描和排序,因而导

动态展示十大经典算法

算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序n个项目要Ο(nlogn)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通常明显比其他Ο(nlogn)算法更快,因为它的内部循环(innerloop)可以在大部分的架构上很有效率地被实现出来. 快速排序使用分治法(Divideandconquer)策略来把一个串行(list)分为两个子串行(sub-lists). 算法步骤: 1.从数列中挑出一个元素,称为“基准”(pivot),

数据挖掘领域十大经典算法初探

译者:July   二零一一年一月十五日 ----------------------------------------- 参考文献:国际权威的学术组织ICDM,于06年12月年评选出的数据挖掘领域的十大经典算法:C4.5, k-Means, SVM, Apriori, EM, PageRank, AdaBoost, kNN, Naive Bayes, and CART.==============博主说明:1.原文献非最新文章,只是本人向来对算法比较敏感.感兴趣,便把原文细看了下,翻译过程中

【白话经典算法系列之十七】 数组中只出现一次的数 其他三次

本文地址:http://blog.csdn.net/morewindows/article/details/12684497转载请标明出处,谢谢. 欢迎关注微博:http://weibo.com/MoreWindows 首先看看题目要求: 数组A中,除了某一个数字x之外,其他数字都出现了三次,而x出现了一次.请给出最快的方法找到x. 这个题目非常有意思,在本人博客中有<位操作基础篇之位操作全面总结>这篇文章介绍了使用位操作的异或来解决——数组中其他数字出现二次,而x出现一次,找出x.有<

三白话经典算法系列 Shell排序实现

山是包插入的精髓排序排序.这种方法,也被称为窄增量排序,因为DL.Shell至1959提出命名. 该方法的基本思想是:先将整个待排元素序列切割成若干个子序列(由相隔某个"增量"的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序. 由于直接插入排序在元素基本有序的情况下(接近最好情况),效率是非常高的,因此希尔排序在时间效率上比前两种方法有较大提高. 以n=10的一个数组49, 38, 65, 97

白话经典算法系列之四 直接选择排序及交换二个数据的正确实现

分类: 白话经典算法系列 2011-08-09 11:15 16682人阅读 评论(29) 收藏 举报 算法面试c 直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接播放排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后. 设数组为a[0…n-1]. 1.      初始时,数组全为无序区为a[0..n-1].令i=0 2.      在无序区a[i…n-1]中选取一个最小的元素,将其与a[i]交

白话经典算法系列之七 堆与堆排序

堆排序与高速排序,归并排序一样都是时间复杂度为O(N*logN)的几种常见排序方法.学习堆排序前,先解说下什么是数据结构中的二叉堆. 二叉堆的定义 二叉堆是全然二叉树或者是近似全然二叉树. 二叉堆满足二个特性: 1.父结点的键值总是大于或等于(小于或等于)不论什么一个子节点的键值. 2.每一个结点的左子树和右子树都是一个二叉堆(都是最大堆或最小堆). 当父结点的键值总是大于或等于不论什么一个子节点的键值时为最大堆.当父结点的键值总是小于或等于不论什么一个子节点的键值时为最小堆.下图展示一个最小堆