JavaScript新手学习笔记3——三种排序方式
来源:互联网 发布:淘宝会查物流重量吗 编辑:程序博客网 时间:2024/06/05 14:14
每种编程语言学到数组的时候,都会讲到排序算法,当时学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对象的三种方式
- JavaScript学习笔记-JavaScript声明全局变量三种方式的异同
- javascript—新手必备、零基础学习
- JavaScript学习笔记(3)--面向半新不新的新手
- JavaScript学习笔记(三)
- Javascript 学习 笔记三
- JavaScript学习笔记三
- javascript学习笔记三
- JavaScript学习笔记三
- JavaScript学习笔记---------(三)
- JavaScript学习笔记(三)
- JavaScript学习笔记之事件处理程序的三种方式
- 适合新手的JavaScript基础学习笔记
- 【Java新手笔记三】Struts2学习
- 学习笔记(3)-----servlet的三种开发方式
- 寻址方式——汇编学习笔记(三)
- 三种排序方式
- android 语音聊天播放动画的问题
- 创建一个小球,3秒后变成两个,再过3秒变成4个,再过3秒变成8个,只可以写一个脚本,该怎么编写?
- 使用Qt开发绘制多个设备的流量曲线图(附带项目图)
- PCM音频格式
- 【算法】POJ2195 Going Home
- JavaScript新手学习笔记3——三种排序方式
- 极客学院----H5的相关笔记----H5基础(7)
- 114. Flatten Binary Tree to Linked List
- Uva 11367 Full Tank?(多状态最短路)
- PHP的运行机制与原理(底层)
- Storm
- 网卡常识
- csdn如何转载别人的文章
- JPA、JTA、JMS、CRUD