本文记录了我在学习前端上的笔记,方便以后的复习和巩固。
推荐大家去看看这一本gitBook上的书十大经典排序算法本文就是看这本书记录的笔记。

冒泡排序

1.算法步骤

1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

2.图片演示:

代码实现:

//数组内两个值互换
function swap(arr, index1, index2) {var temp = arr[index1];arr[index1] = arr[index2];arr[index2] = temp;
}
function bubbleSort(arr){var len = arr.length,i,j;for(i = 0; i < len - 1; i++){    //进行len-1趟选择(循环),第一趟循环会选出最i个最大记录//因为i循环已经拿到了最后的数值,i循环一次拿到一次最大的数值所以减i,i = 已被排序好的数值数量for(j = 0; j < len - 1 - i;){//比较相邻的数值,如果第一个比第二个大就交换他们。 交换到最后最大数值排在数组最后if(arr[j] > arr[j+1]){swap(arr , j, j+1);}}}return arr;
}

详解

依次比较相邻的两个元素,如果后一个小于前一个,则交换,这样从头到尾一次(外循环一次)就将最大的数放在了数组末尾。

从头到尾再来一次(外循环),由于每进行一轮,最后的都已经是最大的了,因此后一轮需要比较(内循环)的次数可以比上一次少一个(i个)。虽然你还是可以让他从头到尾来比较,但是后面比较都是没有意义的,为了效率,你应该对代码进行优化。

选择排序

1.算法步骤

1.首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
2.再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
3.重复第二步,直到所有元素均排序完毕。

2.动图演示

function selectionSort(arr){var len = arr.length;var index,temp;for(var i = 0; i < arr.length - 1; i++){ //进行len - 1趟选择(循环),选择第i个最小记录。var index = i;//因为i循环已经拿了最前面的数值 所以j循环复制拿后面的数值和进行对比。for(var j = i + 1; j < arr.length; j++){if(arr[j] < arr[index]){ //第一次循环次数的min = 1index = j;  //将最小数的索引保存,选择第i个小记录的下标赋值给min,arr[min]为最小数值}}if(j != index){   //与第i个小记录交换  i和min相同代表已经排序完毕swap(arr, i, index);}}return arr;
}

示例:假设给定数组A[1......6]={ 3,5,8,9,1,2 },我们来分析一下A数组进行选择排序的过程

    第一趟:i=1,index=5, a[1] 和 a[5] 进行交换。得到序列:{ 1,5,8,9,3,2 }第二趟:i=2,index=6, a[2] 和 a[6] 进行交换。得到序列:{ 1,2,8,9,3,5 }第三趟:i=3,index=5, a[3] 和 a[5] 进行交换。得到序列:{ 1,2,3,9,8,5 }第四趟:i=4,index=6, a[3] 和 a[5] 进行交换。得到序列:{ 1,2,3,5,8,9 }第五趟:i=5,index=5, 不用交换。得到序列:{ 1,2,3,5,8,9 }(6-1)趟选择结束,得到有序序列:{ 1,2,3,5,8,9 }

插入排序

1.步骤

1.将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

2.从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

2.动图演示

function insertionSort(arr) {var len = arr.length;var value;//循环len趟,外层循环顺序是从数组的第一位到最后一位for(var i = 1; i < len; i++){value = arr[i]; //每趟循环拿到第i的数值赋值给Value//内层顺序是从后往前 j = i - 1会跳过已经排好序的部分。比较后面的数值是否大于前面的数值for(var j = i - 1; j > -1 && arr[j] > value; j--){ arr[j+1] = arr[j]    //满足条件直接交换}//因为前面已经排好序直接给value赋值排好序的最后一个arr[j+1] = value;}
}

代码块中的注释只是自己的理解,如果有错误请指正,多谢各位了

JavaScript学习笔记 - 基础排序算法相关推荐

  1. 数据结构学习笔记——基数排序 | 排序算法总结

    目录 一.基数排序排序思想 二.基数排序算法分析 三.排序算法总结 (一)分类 (二)比较 (三)详细分析 一.基数排序排序思想 基数排序与前面的排序算法不一样,它不基于比较和移动元素来进行排序,而是 ...

  2. JavaScript 学习笔记——基础篇(3)--数组

    数组:存储一组数据 数组的创建: 通过构造函数创建: var myarry = new Array() ;//创建一个空数组 注意:Array()  传参可以为多类型,若参数只有一个数值型数值n,则表 ...

  3. JavaScript学习笔记02【基础——对象(Function、Array、Date、Math)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  4. JavaScript学习笔记01【基础——简介、基础语法、运算符、特殊语法、流程控制语句】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  5. JavaScript学习笔记03【基础——对象(RegExp、Global)】

    w3school 在线教程:https://www.w3school.com.cn JavaScript学习笔记01[基础--简介.基础语法.运算符.特殊语法.流程控制语句][day01] JavaS ...

  6. JavaScript学习笔记一

    JavaScript学习笔记 1. 介绍 2. 基础语法 输入输出 变量 数据类型 简单数据类型 复杂数据类型 类型转换 3. 运算 算术运算符 递增递减运算符 比较运算符 逻辑运算符 赋值运算符 运 ...

  7. 基础排序算法详解与优化

    文章图片存储在GitHub,网速不佳的朋友,请看<基础排序算法详解与优化> 或者 来我的技术小站 godbmw.com 1. 谈谈基础排序 常见的基础排序有选择排序.冒泡排序和插入排序.众 ...

  8. JavaScript学习笔记(六)--数组

    数组初始化 我们都知道,数组是用于保存多个值的集合,在数组中,值被称为元素,值可以是任意的数据类型.在Javascript中,创建数组通常有两种方式:字面量和构造函数. 字面量 数组的元素可以是任意的 ...

  9. JavaScript学习笔记(三)--操作运算符

    JavaScript中的运算符有很多,主要分为算术运算符,比较运算符,逻辑运算符,三目运算符.一元运算符.位运算符等.这些运算符都有一些属于自己的运算规则,下面就为大家介绍一下JavaScript中的 ...

最新文章

  1. JAVA中的Font
  2. python3.6+RF连接mysql
  3. 【微信小程序】根据当前运行环境调用不同的接口地址的一些方法
  4. 【Matlab 图像】 app designer
  5. f-GAN简介:GAN模型的生产车间
  6. 【Python】字符串类型及操作求三位水仙花数
  7. Qt Creator导出3D资产Exporting 3D Assets
  8. AliOS Things v1.1.1新特性
  9. python包实际怎么使用_Python--模块与包
  10. 内置的常用协议实现模版
  11. 中国制造2025变革,背后的大数据来龙去脉
  12. 地图统计_博客 城市访问量统计并且通过Echarts+百度地图展示
  13. 笔记本电脑性价比排行2019_笔记本电脑性价比排行2020榜单介绍
  14. 在如今的Web前端环境下,如何提升自己的竞争力?
  15. 在三角形中rt是什么意思_数学知识点RT三角形是什么意思
  16. 计算机大一新生打字速度,打字速度比赛策划书5篇.doc
  17. 校园网WiFi免认证软件监控
  18. 电脑卡住点什么都没反应怎么解决
  19. 常用的几种 GPRS 模块
  20. Mac电脑Safari 浏览器中Cookie 和网站数据如何管理

热门文章

  1. Argon-Theme 一个非常好看的轻盈,简洁,美观的 WordPress 主题
  2. 百度SEO Cloud-Platform(后台管理系统) v3.1.0
  3. This may cause things to work incorrectly. Make sure to use the same version for both.
  4. css3缩放 transform: scale() 使用缩放之后顶点对齐问题
  5. 小说网站程序源码 自动采集 SEO优化
  6. 淘宝API开发系列--开篇概述
  7. IndexedDB:浏览器里内置的数据库
  8. cakephp 1.3 Views
  9. 爬虫入门四(多线程爬虫)
  10. NOSL redis安装部署 lnmp+redis