js三种基础数组排序算法整理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js三种基础数组排序算法整理相关的知识,希望对你有一定的参考价值。

   数组排序,大概是每个程序员必须掌握的基本算法 ,作为一个刚入门的前端小卒,再被各种面试各种排序折磨过后 ,看过很多别人写的 算法 ,但看总归是理解的不是那么深刻 ,便想着自己整理一下这最基本的三个排序算法 ,希望对还在学习的你有些许帮助 。比较基本的三种算法 。冒泡、插入 、快速 。

   首先来看冒泡排序法 ,基本原理其实就是对数组进行两层循环,外层循环控制次数,数组中有多少个成员,便是要进行多少次内层遍历,不断地将当前成员和下一成员进行对比 ,其实在群众偶其中有很多次是重复对比的 ,先看这样一个写法 :


Array.prototype.Sort=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.Sort=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三种基础数组排序算法整理的主要内容,如果未能解决你的问题,请参考以下文章

js排序算法基础--快速排序

重温前端基础之-js排序算法

算法排序之堆排序

什么是冒泡排序(内附三种代码)

java中数组的三种排序算法

js数组去重算法