标签:https 扫描 tostring 原理 描述 title length 选择排序 快速排序
利用js来实现一些常见的排序算法,在面试中问得还是挺多的,下面我就其进行了简单的总结。
首先要讲讲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));
}
标签:https 扫描 tostring 原理 描述 title length 选择排序 快速排序
原文地址:https://www.cnblogs.com/wangziqiang123/p/11618257.html