JavaScript算法相关

1. 排序

1.1.冒泡排序

  • 每一轮比较,从左至右交换相邻,每轮结束,最后一个为最大
  • 下一轮,需要比较的个数 - 1 j < len - i (范围动态缩小)
  • 共 len - 1 轮比较
function bubbleSort(arr) {var len = arr.length;for (var i = 1; i < len; i++) {for (var j = 0; j < len - i; j++) {if (arr[j] > arr[j+1]) {        //相邻元素两两对比var temp = arr[j+1];        //元素交换arr[j+1] = arr[j];arr[j] = temp;}}}return arr;
}

冒泡排序算法改进思想:

  • 个数较多的排序,(比如)从第6轮开始,数列已经有序,然而排序算法依然会执行第7、8轮直到结束:添加标志,一开始为1,只要有交换便置为0,在外层循环里添加if判断,if(标志为1) { break }
  • 当序列中某一段在比较之前就已经就是有序的:可以在每一轮排序的最后,记录下最后一次元素交换的位置,那个位置也就是无序数列的边界,再往后就是有序区了
  • 正反向冒泡排序
function bubbleSort(arr) {console.time('冒泡排序耗时')var len = arr.lengthvar lastChangeIndex = 0 // 初始,最后一次交换位置var sortBorder = len -1 // 初始有序边界为最后一值for (var i = 1; i < len; i++) {var isSorted = truefor (var j = 0; j < sortBorder; j++) {if (arr[j] > arr[j+1]) {        //相邻元素两两对比var temp = arr[j+1]        //元素交换arr[j+1] = arr[j]arr[j] = tempisSorted = falselastChangeIndex = j}}sortBorder = lastChangeIndexif(isSorted) {break}}console.timeEnd('冒泡排序耗时')return arr
}var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]
console.log(bubbleSort(arr))
function bubbleSort3(arr3) {var low = 0;var high= arr.length-1; //设置变量的初始值var tmp,j;console.time('2.改进后冒泡排序耗时');while (low < high) {for (j= low; j< high; ++j) //正向冒泡,找到最大者if (arr[j]> arr[j+1]) {tmp = arr[j]; arr[j]=arr[j+1];arr[j+1]=tmp;}--high;                 //修改high值, 前移一位for (j=high; j>low; --j) //反向冒泡,找到最小者if (arr[j]<arr[j-1]) {tmp = arr[j]; arr[j]=arr[j-1];arr[j-1]=tmp;}++low;                  //修改low值,后移一位}console.timeEnd('2.改进后冒泡排序耗时');return arr3;
}
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48];
console.log(bubbleSort3(arr));//[2, 3, 4, 5, 15, 19, 26, 27, 36, 38, 44, 46, 47, 48, 50]

在这里插入图片描述

循序渐进的过程:
冒泡排序2次改进
JavaScript算法(含冒泡排序3次改进)

1.2. 选择排序

思想:

  • len-1 轮排序
  • 每轮排序,选出最小的数,放在最前的位置
    在这里插入图片描述

1.3. 插入排序

思想: 打牌
在这里插入图片描述

1.4. 希尔排序

  • 确定一个增量
    -在这里插入图片描述

1.5. 快速排序

  • 首先设定一个分界值,通过该分界值将数组分成左右两部分。
  • 将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。
  • 然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。
  • 重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。

1.6. 随机排序

  • Math.random()得到的是0~1之间的随机数;
  • sort()可以调用一个函数做为参数,这个函数接收(a,b)两个参数,
    ① a<b返回-1 (小于0的值)
    ② a=b返回0,
    ③ a>b返回1(大于0的值),
    以这样的规则返回正负数的函数,排序结果为升序;
arr.sort((a, b) => a - b) // 升序排序
arr.sort((a, b) => b - a) // 降序排序
  • 让Math.random()随机出来的数与0.5做为一个比较,为正为负的几率各一半
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
arr.sort(function() {return Math.random() - 0.5;
})
console.log(arr);

2. 函数柯里化

详解JS函数柯里化

3. 技巧方法

  • 字符串倒序
str.split('').reverse().join('')
  • 斐波那契
function getFibo(i) {if (i == 0 || i == 1) {return 1} else {return arguments.callee(i-1) + arguments.callee(i-2)}
}
  • 数组最值
Math.max(...arr)
Math.min(...arr)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/251335.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

javascript --- 编程风格

字符串 const a foobar; const b foo${a}bar; // 此处是反引号(tab键上) const c foobar;解构赋值 const [first, second] arr;function getFullName({ firstName, lastName }) { }function processInput(input) {return { left, right, top, bottom }; } const { left…

$ - 字符串内插

$ 特殊字符将字符串文本标识为内插字符串。 内插字符串是可能包含内插表达式的字符串文本。 将内插字符串解析为结果字符串时&#xff0c;带有内插表达式的项会替换为表达式结果的字符串表示形式。 此功能在 C# 6 及该语言的更高版本中可用。 与使用字符串复合格式设置功能创建…

数据结构基础知识

排序 参考&#xff1a;https://www.bilibili.com/video/av38482633/?spm_id_fromtrigger_reload 目录 排序 插入排序 直接插入排序 折半排序 希尔排序 ​ 交换排序 冒泡排序 快速排序 选择排序 堆排序 流量单位计算 什么是计数排序 复杂度分析&#xff1a; 什…

linux中安装软件,查看、卸载已安装软件方法

各种主流Linux发行版都采用了某种形式的包管理系统&#xff08;PMS&#xff09;来控制软件和库的安装。 软件包存储在服务器上&#xff0c;可以利用本地Linux系统上的PMS工具通过互联网访问。这些服务器称为仓库。 由于Linux发行版众多,目前还没有统一的PMS标准工具。 这里分别…

html5 --- 使用javascript脚本控制媒体播放

H5中的标签(<audio…/> 和 <video…/>)对于JS中的HTMLAudioElement对象和HTMLVideoElement对象 对象有以下几个方法: play(): 播放 pause(): 暂停播放 load(): 重新装载音频、视频 canPlayType(type): 判断该元素可播放type类型的音频、视频 下面是一个简单的音乐…

在js中if条件为null/undefined/0/NaN/表达式时,统统被解释为false,此外均为true

Boolean 表达式 一个值为 true 或者 false 的表达式。如果需要&#xff0c;非 Boolean 表达式也可以被转换为 Boolean 值&#xff0c;但是要遵循下列规则&#xff1a; 所有的对象都被当作 true。当且仅当字符串为空时&#xff0c;该字符串被当作 false。null 和 undefined 被当…

ES6专题——整理自阮一峰老师的ECMAScript 6入门

这里我仅仅是记录了那些我认为值得注意的ES6知识点&#xff0c;详细版请挪步https://es6.ruanyifeng.com/#docs/let let和const命令 let声明的变量只在它所在的代码块有效。 var a []; for (let i 0; i < 10; i) {a[i] function () {console.log(i);}; } a[6](); // 6 …

开发测试比

1.服务器已经开启了CORS跨域支持 浏览器有同源策略限制&#xff1a;协议、域名、端口号其中无法向非同源地址发送ajax请求 跨域解决方法&#xff1a;JSONP&#xff08;只支持get不支持post&#xff09;&#xff0c;不是ajax 凡是有src属性的标签都有跨域能力 前端定义一个处理…

map函数用法详解

map函数是Python内置的高阶函数&#xff0c;它是一个典型的函数式编程例子。它的参数为: 一个函数function、一个或多个sequence。通过把函数function依次作用在sequence的每个元素上&#xff0c;得到一个新的sequence并返回。注意&#xff1a;map函数不改变原有的sequence&…

2018暑假集训测试六总结

拿到试题没几分钟&#xff0c;就有人说会做T1QAQ。第一题感觉似曾相识&#xff0c;其实不同。梳理出本质后发现有两个限制&#xff0c;便想用枚举递推来快速求解&#xff0c;发现要么是不会推&#xff0c;要么是时空超限&#xff0c;不会优化。期间也想过通过离线做&#xff0c…

css3 --- 使用媒体查询进行响应式布局

css3引入media,可以根据设备特性进行不同的布局, 本文展示的是根据不同屏幕的宽度进行不同的布局,代码如下: <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><title> 针…

node项目正常启动后不能访问(防火墙未放行端口)

今天打开个人站点&#xff0c;发现登陆不了&#xff0c;原以为是pm2的问题&#xff0c;先停了pm2用node app.js的方式运行后端代码&#xff0c;项目能正常启动但是依然不能登陆。 1 检查ecs的安全组规则&#xff0c;node项目端口3000、8888是否放行 2 确认node正常运行 输入…

[转载]dbms_lob用法小结

http://blog.sina.com.cn/s/blog_713978a50100prkt.html CLOB里存的是2进制 判定长度 DBMS_LOB.GETLENGTH(col1)获取文本 DBMS_LOB.SUBSTR(col1,n,pos)DBMS_LOB.SUBSTR(col1,10,1)表示从第1个字节开始取出10个字节 DBMS_LOB.SUBSTR(CLOB_VAR,32767)表示截取CLOB变量保存的全…

javascript --- 利用节点关系访问HTML元素

<input type"button" value"父节点"onclick"change(curTarget.parentNode);" /><input type"button" value"第一个"onclick"change(curTarget.parentNode.firstChild.nextSibling);" /><input typ…

mysql中列属性

mysql列属性包括&#xff1a;NULL 、default、comment、primary key、unique key 一、NULL定义方式&#xff1a;NULL&#xff08;默认&#xff09;  NOT NULL 空属性有2个值&#xff0c;mysql数据库默认字段都是为null的&#xff0c;但是在实际开发过程中&#xff0c;尽可能保…

前端知识点整理(三)不定时更新~

目录 一、移动端跨平台开发方案 Hybrid App React Native Weex Flutter PWA &#xff08;Progressive Web App&#xff09; 小程序 Cordova html5 组件和模块的区别 组件化 模块化 前端代码规范 前端工程化理解 网站性能监测与优化策略 1.网络传输性能优化 页…

前端试题(一)

2020-03-28 金卡智能 *1. 脚手架 vue-cli现在用的什么版本&#xff0c;2版本了解多少&#xff0c;2 3有什么区别 绝对路径与相对路径 ./ 当前路径 …/父路径 / 绝对路径 某文件里引用其他路径下的资源&#xff1a; 判断该文件所在文件夹与其他资源路径间的关系。 什么&#…

html5 --- 利用localStorage进行本地存储

首先做一个提交到本地存储的表单及一个用来显示本地localStorage信息的表格…代码如下: <h2> 本地存储用 </h2>标题: <input id"title" name"title" type"text" size"60" style"margin-left:32px;margin-bottom:…

Tomcat启动阻塞变慢

Tomcat 熵池阻塞变慢详解 Tomcat 启动很慢&#xff0c;且日志上无任何错误&#xff0c;在日志中查看到如下信息&#xff1a; Log4j:[2015-10-29 15:47:11] INFO ReadProperty:172 - Loading properties file from class path resource [resources/jdbc.properties] Log4j:[201…