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