js三种基础数组排序算法整理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js三种基础数组排序算法整理相关的知识,希望对你有一定的参考价值。
数组排序,大概是每个程序员必须掌握的基本算法 ,作为一个刚入门的前端小卒,再被各种面试各种排序折磨过后 ,看过很多别人写的 算法 ,但看总归是理解的不是那么深刻 ,便想着自己整理一下这最基本的三个排序算法 ,希望对还在学习的你有些许帮助 。比较基本的三种算法 。冒泡、插入 、快速 。
首先来看冒泡排序法 ,基本原理其实就是对数组进行两层循环,外层循环控制次数,数组中有多少个成员,便是要进行多少次内层遍历,不断地将当前成员和下一成员进行对比 ,其实在群众偶其中有很多次是重复对比的 ,先看这样一个写法 :
Array.prototype.bubbleSort=function (){
for(var i=0;i<this.length;i++){
for(var j=0;j<this.length-1;j++){
if(this[j]>this[j+1]){
var temp=this[j]; this[j]=this[j+1]; this[j+1]=temp; } } } return this; }
这个无疑是最最基本 的写法了 ,但实际上这个还可以稍做一下优化 ,节省其时间复杂度 ,看代码如下 :
Array.prototype.bubbleSort=function (){
for(var i=0;i<this.length;i++){
for(var j=0;j<this.length-i-1;j++){
if(this[j]>this[j+1]){
var temp=this[j];
this[j]=this[j+1];
this[j+1]=temp;
}
}
}
return this;
}
再者 来看插入排序 ,顾名思义 ,是将数组每一个成员 ,一一插入到正确的位置,假设第一个成员【0】已经完成排序 ,然后从【1】开始遍历数组 ,每外层遍历一次 内层循环便跟之前已排序好的每个成员进行比较 ,若arr【j-1】>arr【j】,则交换位置,以此类推,直到退出循环,将其插入到正确的位置;代码如下 :
Array.prototype.insertSort=function (){ var prevIndex,current; for(var i=1;i<this.length;i++) { prevIndex=i-1; current=this[i]; while(prevIndex>=0&&this[prevIndex]>current){ this[prevIndex+1]=this[prevIndex]; prevIndex--; } this[prevIndex+1]=current; } return this; } var arr=[12,3,23,45,32]; arr.insertSort();
最后我们来看一下比较有实用价值的快速排序法 ;快速排序法原理是将数组不断地进行分治,声明两个数组 left和right,然后选择数组中间一个成员作为 基准base ,将比其大的push进right数组 ,比其小的push进左边数组 ,接着递归接着对left和right数组进行继续分组排序 ,每分一次组便对left、base、right进行concat,以此类推 ,直到排序完成,代码如下:
Array.prototype.quickSort=function(){ if(this.length<=1){return this}; var baseIndex=Math.floor(this.length/2); var base=this.splice(baseIndex,1)[0]; var left=[],right=[]; for(var i=0;i<this.length;i++){ if(this[i]<base){ left.push(this[i]); }else{ right.push(this[i]); } } return left.quickSort().concat([base],right.quickSort()); } var a=[12,2,34,32,16]; a.quickSort();
以上是关于js三种基础数组排序算法整理的主要内容,如果未能解决你的问题,请参考以下文章