码迷,mamicode.com
首页 > 编程语言 > 详细

js排序算法

时间:2019-10-02 21:23:38      阅读:96      评论:0      收藏:0      [点我收藏+]

标签:https   扫描   tostring   原理   描述   title   length   选择排序   快速排序   

利用js来实现一些常见的排序算法,在面试中问得还是挺多的,下面我就其进行了简单的总结。

sort()方法

首先要讲讲JS数组排序的sort方法,它实现的原理是通过两两比较的方法,sort()方法按升序排列数组项,即最小的值位于最前面,最大的值位于最后面,为了实现排序,sort()方法会调用每个数组项的toString()方法,然后比较得到的字符串,即使数组中的每一项都是数值,sort方法比较的也是字符串。因此有必要定义一个比较函数:

function compare(value1,value2){
      if(value1<value2){
         return -1;
       }else if{
         return 1;
       }else{
        return 0;
      }
   }

这个比较函数可以适用于大多数数据类型,只要将这个比较函数作为参数传递给sort()方法即可。

var values=[0,1,5,10,15];
values.sort(compare);
alert(values);//0,1,5,10,15

这是升序,当然也可以通过比较函数产生降序排序的效果。

function compare(value1,value2){
          if(value1<value2){
             return 1;
           }else if{
             return -1;
           }else{
            return 0;
          }
       }

交换返回值即可。
如果仅仅是要比较数值类型,可以使用更简单的比较函数。

function compare(value1,value2){
    return value2-value1;
}

这是降序排序。

冒泡排序

之所以叫冒泡排序,是因为使用这种排序算法排序时,数据值会像气泡一样从数组的一端漂移到另一端。比较相邻的值,当左侧值大于右侧值时将它们进行互换。

定义一个交换函数

function swap(arr,index1,index2){
     var temp=arr[index1];
     arr[index1]=arr[index2];
     arr[index2]=temp;
}

冒泡排序的代码

function bubblesort(){
    for(var i=0;i<arr.length;i++){
        for(var j=0;;j<arr.length-i-1;j++){
            if(arr[j]>arr[j+1]{
                    swap(arr,j,j+1);
             }
         }
    }  
}

选择排序

选择排序从数组的开头开始,将第一个元素和其他元素进行比较。检查完所有元素后,最小的元素会被放到数组的第一个位置,然后算法会从第二个位置继续。这个过程一直进行,当进行到数组的倒数第二个位置时,所有的数据便完成了排序。

function selectionSort(){
var min,temp;
 for(var i=0;i<=arr.length-2;i++){
   min=i;
       for(var j=i+1;j<=arr.length-1;j++){
           if(arr[j]<arr[min]){
              min=j;
            }
        swap(arr,i,min);
        }
   }
}

插入排序

具体算法描述如下:
⒈ 从第一个元素开始,该元素可以认为已经被排序
⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描
⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置
⒋ 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置
⒌ 将新元素插入到下一位置中
⒍ 重复步骤2~5

function selectionSort(){
       var temp;
       for(var i=0;i<arr.length;i++){
          temp=arr[i];
          j=i;
          while(j>0&&arr[j-1]>=temp){
            arr[j]=arr[j-1];
            --j
          }
          arr[j]=temp;
       }
}

快速排序

function quickSort(arr){
   if(arr.length<1) return arr;
   var cut=Math.floor(arr.length/2);
   var left=[];
   var right=[];
   var num=arr.splice(cut,1)[0];
   for(var i=0;i<arr.length;i++){
       if(arr[i]<num){
             left.push(arr[i]);
       }else{
             right.push(arr[i]);
       }
   }
   return quickSort(left).concat(num,quickSort(right));
}

原文:大专栏  js排序算法


js排序算法

标签:https   扫描   tostring   原理   描述   title   length   选择排序   快速排序   

原文地址:https://www.cnblogs.com/wangziqiang123/p/11618257.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!