博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript常用算法
阅读量:6952 次
发布时间:2019-06-27

本文共 1629 字,大约阅读时间需要 5 分钟。

一、排序算法

1、Array.sort(function)(JavaScript原生排序算法)

参数:比较函数(可选)
若无参数,则按照首字母的ASCII码排序,比较函数的作用为确定排序

function(value1,value2){    if (value1 > value2) {        return 1;    }else if (value1 < value2) {        return -1    }else {        return 0    }}

按数组中对象的某一属性排序:

function compared(property){    return function(a,b){        let value1 = a[property];        let value2 = b[property];        return value2 - value1;    }}array.sort(compared('property'));

2、冒泡排序

原理:从第一个元素开始依次同相邻元素比较,小于则交换,直到比较完最后一个元素,否则停止,完成一个元素的冒泡行为。循环进入下一元素。
核心算法:

for(let i=0;i
arr[j]){ [arr[i],arr[j]] = [arr[j],arr[i]];//交换相邻值 } }}

3、选择排序

原理:每次选择最大的元素,依次至于末尾。
核心算法:

let len = arr.length;for(let i=0;i

4、插入排序

原理:从第二个元素开始,依次向前插入(插入时前面为有序数列),直到最后一个元素。
核心代码:

let len = arr.length;for(let i=1;i

5、快速排序

原理:选取一个基准元素,以此分为两组,大于基准元素和小于基准元素组。然后递归两个子数组。最后把数组连接起来。
function quickSort(arr){

let len = arr.length;if(len<=1){//递归出口    return arr;}let mid = Math.floor(len/2)    ,left = []    ,right = [];arr.forEach((item)=>{    if(item>arr[mid]){        left.push(item)    }else {        right.push(item)    }})let _left = quickSort(left)    ,_right = quickSort(right);retrun left.concat(arr[mid],right)

}

各算法的性能测试:(测试数据来源)

数据结果如下

冒泡排序耗时26000ms左右

选择排序耗时5800ms左右

插入排序耗时10600ms左右

归并排序耗时80-100ms

快速排序

cutoff==5--->30-50ms
cutoff==10 --->30-60ms
cutoff==50 ---->40-50ms
cutoff==3效果不错--->30-50ms,30ms出现的机会很多
cutoff==0时(即不在分割长度短的时候转为插入排序),效果依然不错,30-50ms,30ms出现的很多

堆排序耗时120-140ms

JavaScript提供的原生排序耗时55-70ms

结论

快速排序效率最高,cutoff取3效果最好(没有悬念)

原生排序竟然是第二快的排序算法!诸位同学参加笔试的时候,在没有指明必须要用哪种排序算法的情况下,如果需要排个序,还是用原生的yourArr.sort(function(a,b){return a-b})吧,毕竟不易错还特别快!

转载地址:http://gbjil.baihongyu.com/

你可能感兴趣的文章
citrix桌面发布方式
查看>>
HTTP协议详解(真的很经典)
查看>>
EMC销售部全球CTO Patricia Florissi:大数据不是炒作
查看>>
判断字符串是否是合法的ipv4地址
查看>>
Linux系统手动安装rzsz 软件包
查看>>
Hyper-V安装笔记
查看>>
Golang面试题解析(二)
查看>>
Juniper SRX与思科跑IPSEC ×××+OSPF
查看>>
C语言学习之路(1)
查看>>
passwd修改用户密码
查看>>
Windows Phone(三)WP7版 " 记账本" 开发(使用SQLite数据库)
查看>>
CSS 几款比较常用的翻转特效(转载)
查看>>
html5 拖拽事件
查看>>
Spring创建对象的三种方式以及创建时间
查看>>
IO多路复用, 基于IO多路复用+socket实现并发请求(一个线程100个请求), 协程
查看>>
大白话Vue源码系列(03):生成AST
查看>>
vi / vim 删除以及其它命令
查看>>
Codeforces Round #564 (Div. 2) B. Nauuo and Chess
查看>>
Android 微信第三方登录
查看>>
Jsoup后台解析html、jsp网页
查看>>