JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)
每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法。今天来总结一下javascript中如何实现三种排序算法。
1.冒泡排序(默认升序排列哦)
原理:
冒泡排序的原理,顾名思义,就是小数往上冒,大数往下沉。从第一个数开始,如果比第二个数大就交换位置,然后跟第三个数字进行比较大小,交换位置等。
举例一下,有数组[2,4,3,5,1]
第一次循环:2<4 不交换;4>3 交换;4<5不交换;5>1交换,故结果是[2,3,4,1,5];
第二次循环:2<3,3<4不交换;4>1交换,4<5不交换,故结果是[2,3,1,4,5]
同理:
第三次循环:结果是[2,1,3,4,5]
第四次循环:结果是[1,2,3,4,5]
javascript代码实现:
function bubbleSort(arr){
for(var r=1;r<arr.length;r++){
for(var i=0;i<arr.length-r;i++){
if(arr[i]>arr[i+1]){
var temp=arr[i];
arr[i]=arr[i+1];
arr[i+1]=temp;
}
}
}
return arr;
}
var arr=[2,4,3,1,5];
arr=bubbleSort(arr);
console.log(arr);//[1,2,3,4,5]
2.插入排序(默认升序)
原理:
默认第一个数字最小,然后取出第二个数字进行插入,如果第二个数字小于第一个数字,则第一个数字后移一位,第二个数字放到第一个位置。然后取出第三个数字,从第一个位置开始比较插入,直到最后一个数字。
举例:有一个数组[2,4,3,5,1]
第一次插入:2<4不插入,结果为[2,4,3,5,1]
第二次插入:3>2,2不后移,3<4,4后移一位,3插入,结果为[2,3,4,5,1]
同理:
第三次插入:结果为[2,3,4,5,1]
第四次插入:结果为[1,2,3,4,5]
javascript代码实现:
var arr=[2,4,3,5,1];
//插入排序
function insertSort(arr){
for(var i=1;i<arr.length;i++){
var t=arr[i];
var p=i-1;
while(t<arr[p]&&p>=0){
arr[p+1]=arr[p];
p--;
}
arr[p+1]=t;
}
}
insertSort(arr);
console.log(arr);//[1,2,3,4,5]
3.快速排序(默认升序排列)
原理:
取数组中间的元素,大于中间元素的放到right数组中,小于中间元素的放到left数组中,一次递归,直至每个left和right中元素为空或只为一个元素的时候停止。最后拼接子数组即可。
举例:现有一数组[2,4,3,5,1]
第一次排序:left=[2,1] middle=[3] right=[4,5]
第二次排序:left.left=[] left.middle=[1] left.right=[2] middle=[3] right.left=[4] right.middle=[5] right.right=[]
拼接即可得:[1,2,3,4,5]
javascript代码实现:
var arr=[2,4,3,5,1];
function quickSort(arr){
if(arr.length<=1){
return arr;
}
else{
var c=arr.splice(Math.floor(arr.length/2),1)[0];
var left=[],right=[];
for(var i=0;i<arr.length;i++){
if(arr[i]>c){right.push(arr[i])}
else{left.push(arr[i])}
}
return quickSort(left).concat(c,quickSort(right));
}
}
arr=quickSort(arr);
console.log(arr);
三种排序算法如上了,如果对比之下,冒泡排序的复杂度是O(n^2),插入排序复杂度是O(1),快速排序复杂度是O(n*log(n))。
算法讲述如有不对,希望批评指正~
JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)的更多相关文章
- Javascript作用域学习笔记(三)
看完<你不知道的javascript>上,对作用域的新的理解(2018-9-25更) 一.学习笔记: 1.javascript中的作用域和作用域链 + 每个函数在被调用时都会创建一个 ...
- JavaScript新手学习笔记(一)
1.JavaScript 对大小写敏感. JavaScript 对大小写是敏感的. 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getElementById 与 getE ...
- JavaScript新手学习笔记1——数组
今天,我复习了一下JavaScript的数组相关的知识,总结一下数组的API: 总共有11个API:按照学习的先后顺序来吧,分别是: ① toString() 语法:arr.toString(); ...
- MySQL学习笔记:三种组内排序方法
由于MySQ没有提供像Oracle的dense_rank()或者row_number() over(partition by)等函数,来实现组内排序,想实现这个功能,还是得自己想想办法,最终通过创建行 ...
- Javascript MVC 学习笔记(三) 视图和模板
模板 Javascript中模板的核心概念是,将包括模板变量的HTML片段和Javascript对象做合并.把模板变量替换为对象中的属性值. 书中讲到了几种库作为模板引擎,可是链接失效了.能够在这里下 ...
- JavaScript新手学习笔记4——我记不住的几个坑:短路逻辑、按值传递、声明提前
1.短路逻辑 逻辑运算中,如果前一个条件已经可以得出最终结论,则后续所有条件不再执行!这里的逻辑运算指的是逻辑与和逻辑或. 我们要理解逻辑与是两个条件都为真的时候,才为真,如果第一个就是假的,那么后面 ...
- ANDROID_MARS学习笔记_S02_008_ANIMATION第二种使用方式:xml
一.简介 二.代码1.res\anim下的xml(1)alpha.xml.xml <?xml version="1.0" encoding="utf-8" ...
- ANDROID_MARS学习笔记_S02_007_Animation第一种使用方式:代码
一.简介 二.代码1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> ...
- 【JS面试向】选择排序、桶排序、冒泡排序和快速排序简介
新年伊始,又到了金三银四的时候了.面对前端越来越多的算法面试题,我简单的整理了一下几种比较常见的数组排序方式,分别介绍其基本原理和优劣势.(ps:才疏学浅,希望大家可以在issues下面指出问题) 选 ...
随机推荐
- 你真的了解 console 吗
对于前端开发者来说,在开发过程中需要监控某些表达式或变量的值的时候,用 debugger 会显得过于笨重,取而代之则是会将值输出到控制台上方便调试.最常用的语句就是console.log(expres ...
- Android Studio 打开弹出警告框
1.Android Studio打开后,自己的项目没有打开,就弹出了警告框,重启之后依然弹出警告框: 警告框内容:"Cannot load project: java.lang.Illega ...
- ArcMap - 使用python更新列中的值
概述:在外文网上,很多人都问在ArcMap中如何通过SQL修改属性字段的值,我见回答的人都说通过"Field Calculator",貌似不能直接通过SQL语句. 虽然学gis开发 ...
- JavaScript 类、构造函数、原型
类.构造函数.原型 :本质均为函数 利用的原理是:词法作用域,调用对象及作用域链 闭包 属性查找方式 设计和new运算符一起使用的函数叫做构造函数. 构造函数的工作:初始化一个新创建的对象 ...
- JQuery 解析xml
JQuery 可以通过 $.get() 或 $.post() 方法来加载 xml. JQuery 解析 XML 与解析 DOM 一样, 可以使用 find(), children() 等函数来 ...
- 26.单片机中利用定时器中断,在主流程while(1){}中设置每隔精确时间计量
{ CountMilliseconds++;//只负责自加,加到最大又重新从0开始 } u16 setDelay(u16 t) { ); } u8 checkDelay (u16 t)//返回非零表示 ...
- Foj1675数论
http://acm.fzu.edu.cn/problem.php?pid=1675 首先必须知道一点数论的基本公式 (a-b) %c =0 -----> a%c=b%c 首先通过大数取余求出目 ...
- 返回 m 到 n 的随机整数
返回 m 到 n 的随机整数 <script type="text/javascript"> function randomNumber(m,n){ return Ma ...
- android 手机信息获取
1. adb已安装 2. adb shell getprop 此时已列出所有相关信息
- 3.1 as86汇编器
在开始讲述as86汇编器前,这本书引用内核中bootsect.s框架程序汇编代码来解释,记录下这一小段代码中不理解的地方,下面是这段实例代码: .globl begtext, begdata, beg ...