JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序、选择排序与插入排序复杂度都是二次方级别的,放在一起说吧。
介绍一些学习这三个排序方法的比较好的资料。冒泡排序看《学习JavaScript数据结构与算法》介绍的冒泡排序,选择排序看《计算机科学概论(第三版)》里介绍的选择排序,插入排序看《计算机科学概论(第11版)》里介绍的插入排序,
通过这三份资料弄明白实现原理之后,最后看《学习JavaScript数据结构与算法》一书里的JS实现代码。
嗯,《学习JavaScript数据结构与算法》这本书里都有现成代码,是用ES5写的,就不在这儿写了,关键是弄清楚原理,然后JS代码每天写两遍,就OK了。
我在这儿用ES6来写一下。
冒泡排序:
var bubbleSort = arr => {
let length = arr.length;
for (let i = 0; i < length; i++) {
for (let j = 0; j < length-1-i; j++) {
if (arr[j] > arr[j+1]) {
[arr[j], arr[j+1]] = [arr[j+1], arr[j]];
}
}
}
}
ES6的解构好酸爽,都不用辅助函数了,几行代码就实现了冒泡排序。验证一下正确性吧。
var array = [7, 3, 9, 6, 11, 2, 4, 5];
var bubbleSort = arr => {
let length = arr.length;
for (let i = 0; i < length; i++) {
for (let j = 0; j < length-1-i; j++) {
if (arr[j] > arr[j+1]) {
[arr[j], arr[j+1]] = [arr[j+1], arr[j]];
}
}
}
}
bubbleSort(array);
console.log(array);

OK,chrome浏览器没问题,接下来用ES6实现选择排序。
选择排序:
var selectSort = arr => {
let length = arr.length,
indexMin;
for (var i = 0; i < length - 1; i++) {
indexMin = i;
for (var j = i; j < length; j++) {
if (arr[j] < arr[indexMin]) {
indexMin = j;
}
}
if (i !== indexMin) {
[arr[i], arr[indexMin]] = [arr[indexMin], arr[i]];
}
}
}
验证过程与冒泡排序一样,就不在这儿写了。下面实现最后一个插入排序。
插入排序:
var insertSort = arr => {
let length = arr.length,
j, temp;
for (var i = 1; i < length; i++) {
j = i;
temp = arr[i];
while (j > 0 && arr[j-1] > temp) {
arr[j] = arr[j-1];
j--;
}
arr[j] = temp;
}
};
验证过程与冒泡排序一样。OK,三个速度较慢的排序算法完成了,下次写速度快的排序算法,也是各大浏览器实现sort时用的算法。
说好用ES6语法,我怎么忘记了箭头函数,赶紧补上。。。今后业务代码里,要强迫自己使用箭头函数,不然怎么提升自己呢。
JavaScript算法(冒泡排序、选择排序与插入排序)的更多相关文章
- lowB三人组算法-冒泡排序-选择排序-插入排序
冒泡排序 时间复杂度:O(n2) 算法稳定 第一趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到最后位置得出一个第一大数 第二趟,从第一个数开始,相邻两个数比较,大的数交换放后,交换到倒数 ...
- php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
<?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){ $num=count($arr); ...
- Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析
前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...
- 算法 排序lowB三人组 冒泡排序 选择排序 插入排序
参考博客:基于python的七种经典排序算法 [经典排序算法][集锦] 经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...
- javascript的冒泡排序, 快速排序, 选择排序, 插入排序
冒泡排序, 最经典的排序, 把比较大的数字往后放, 和选择排序恰恰相反: <!DOCTYPE html> <html lang="en"> <head ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- python算法(一)基本知识&冒泡排序&选择排序&插入排序
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...
- 【排序算法】——冒泡排序、选择排序、插入排序、Shell排序等排序原理及Java实现
排序 1.定义: 所谓排序,即是整理文件中的内容,使其按照关键字递增或递减的顺序进行排列. 输入:n个记录,n1,n2--,其对应1的关键字为k1,k2-- 输出:n(i1),n(i2)--,使得k( ...
- 排序算法总结------选择排序 ---javascript描述
每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...
随机推荐
- ci框架登陆之后每隔几分钟就需要重新登录的问题
一个简单的登陆写好之后,发现每次进入需要登陆之后才能进入的页面都会跳转到登录页面,猜测应该是session被清了,打印出来,果然为空,但是我没有设置session的生存周期,按照默认的应该是24小时, ...
- Vue - 内部指令
1.插值 A:<span>TEXT:{{text}}</span> {{text}}会被相应的数据类型text属性值替换,当text值改变时候,文本中的值也会相应的发生变化 B ...
- Java对象大小计算
这篇说说如何计算Java对象大小的方法.之前在聊聊高并发(四)Java对象的表示模型和运行时内存表示 这篇中已经说了Java对象的内存表示模型是Oop-Klass模型. 普通对象的结构如下,按64位机 ...
- Linux内核笔记——内存管理之slab分配器
内核版本:linux-2.6.11 内存区和内存对象 伙伴系统是linux用于满足对不同大小块内存分配和释放请求的解决方案,它为slab分配器提供页框分配请求的实现. 如果我们需要请求具有连续物理地址 ...
- 【JBOSS】 JBOSS目录结构
JBOSS在默认情况下可以用3种方式启动minimal,default和all.三种模式内部的模块数量依次递增 例如: 1-执行JBOSS_HOME/bin/run.bat批量处理文件启动JBos ...
- 一站式解决,Android 拍照 图库的各种问题.
在android开发中, 在一些编辑个人信息的时候,经常会有头像这么一个东西,就两个方面,调用系统相机拍照,调用系统图库获取图片.但是往往会遇到各种问题: 1.oom 2.图片方向不对 3.activ ...
- iOS 中自定义 cell,点击cell的时候文字不出现的原因
解决方案: 在setSelected方法中设置要显示label的背景颜色即可
- 获得Map的选择集
ISelection selection = m_hookHelper.FocusMap.FeatureSelection; IEnumFeatureSetup iEnumFea ...
- setTimeout 学习闭包
@(技术笔记)[css] 学习参考网站 css 网站,可供参考 javascript学习网站 var create = function (i){ return function(){ console ...
- 取消TableViewCell选中状态的外观变化
tabelViewcell 使用Xib创建自定义外观的时候,在tableview选中的时候,cell的外观会发生变化,在定义Xib中如下图将选中的外观状态取消掉 也有其他选项,可以选择控制选中的时候的 ...