js排序算法

Posted wangziqiang123

tags:

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

利用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排序算法的主要内容,如果未能解决你的问题,请参考以下文章

常见排序算法及其JS实现

JS--排序算法之简单排序

JS排序算法总结:八种算法对比

js算法初窥01(排序算法01-冒泡选择插入)

js十大排序算法收藏

JS排序算法之归并排序