每种编程语言学到数组的时候,都会讲到排序算法,当时学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——三种排序方式(冒泡排序、插入排序、快速排序)的更多相关文章

  1. Javascript作用域学习笔记(三)

    看完<你不知道的javascript>上,对作用域的新的理解(2018-9-25更) 一.学习笔记:   1.javascript中的作用域和作用域链 +  每个函数在被调用时都会创建一个 ...

  2. JavaScript新手学习笔记(一)

    1.JavaScript 对大小写敏感. JavaScript 对大小写是敏感的. 当编写 JavaScript 语句时,请留意是否关闭大小写切换键. 函数 getElementById 与 getE ...

  3. JavaScript新手学习笔记1——数组

    今天,我复习了一下JavaScript的数组相关的知识,总结一下数组的API: 总共有11个API:按照学习的先后顺序来吧,分别是: ① toString()  语法:arr.toString(); ...

  4. MySQL学习笔记:三种组内排序方法

    由于MySQ没有提供像Oracle的dense_rank()或者row_number() over(partition by)等函数,来实现组内排序,想实现这个功能,还是得自己想想办法,最终通过创建行 ...

  5. Javascript MVC 学习笔记(三) 视图和模板

    模板 Javascript中模板的核心概念是,将包括模板变量的HTML片段和Javascript对象做合并.把模板变量替换为对象中的属性值. 书中讲到了几种库作为模板引擎,可是链接失效了.能够在这里下 ...

  6. JavaScript新手学习笔记4——我记不住的几个坑:短路逻辑、按值传递、声明提前

    1.短路逻辑 逻辑运算中,如果前一个条件已经可以得出最终结论,则后续所有条件不再执行!这里的逻辑运算指的是逻辑与和逻辑或. 我们要理解逻辑与是两个条件都为真的时候,才为真,如果第一个就是假的,那么后面 ...

  7. ANDROID_MARS学习笔记_S02_008_ANIMATION第二种使用方式:xml

    一.简介 二.代码1.res\anim下的xml(1)alpha.xml.xml <?xml version="1.0" encoding="utf-8" ...

  8. ANDROID_MARS学习笔记_S02_007_Animation第一种使用方式:代码

    一.简介 二.代码1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> ...

  9. 【JS面试向】选择排序、桶排序、冒泡排序和快速排序简介

    新年伊始,又到了金三银四的时候了.面对前端越来越多的算法面试题,我简单的整理了一下几种比较常见的数组排序方式,分别介绍其基本原理和优劣势.(ps:才疏学浅,希望大家可以在issues下面指出问题) 选 ...

随机推荐

  1. ImageView设置点击效果没有用?ImageView src的图片大小改变不了?

    ImageView设置点击效果没有用? 解决 1.ImageView xml里面必须clickable 和longClickable为true <ImageView android:layout ...

  2. memcache锁,解决查询过多email查询为空的问题

    /* 设置memcache锁,解决查询过多email查询为空的问题 Begin */ $mmc = new Memcache; $mmc->connect('127.0.0.1', 11211) ...

  3. Win7系统安装MySQL

    最近重装系统,重新搭建编译环境:重装mysql,发现一篇特别好的安装博客(http://blog.csdn.net/longyuhome/article/details/7913375),转载过来,留 ...

  4. Android Support V7 包中 ActionBar的使用

    以下示例为API<11,因为API>=11时本来就有ActionBar可以使用,所以不猜讨论范围之内 今天Google发布了最新的API 18,包括众多新的性能,正好最近在研究Action ...

  5. mysql 5.5 升级到 mysql 5.6

    目前MySQL数据库软件升级到5..26版本,主要有两种方法.一种是停机升级,即在现有环境下先停止数据库,然后升级数据库软件版本和数据库版本:另外一种是采用不停机的主从升级(master--slave ...

  6. Oracle数据库之数据类型

    Oracle数据库之数据类型 Oracle基本数据类型(亦叫内置数据类型,internal datatypes或built-in datatypes)可以按类型分为:字符串类型.数字类型.日期类型.L ...

  7. php经典面试题

    1. 用PHP打印出前一天的时间,打印格式是2007年5月10日 22:21:21 2. PHP代码如下:$a="hello"; $b=&$a;unset($b);$b=& ...

  8. 我自己的style

    /** DATE:Time AUTHOR:Zoe TEAM:公司名称 INTRO:cssName **/ @charset "utf-8"; /*通用公共样式 开始*/ /* 清除 ...

  9. PHP安全设置(转载)

    大家都知道PHP已经是当前最流行的Web应用编程语言了.但是也与其他脚本语言一样,PHP也有几个很危险的安全漏洞.所以在这篇教学文章中,我们将大致看看几个实用的技巧来让你避免一些常见的PHP安全问题. ...

  10. Array and its point.

    a is the array name. &a is the ponit of 2-D array which contains a[5]. the type of &a should ...