JavaScript数组排序的六种常见算法总结
前言
着急用的话,选择前两个就行了,后面的看看就好。
开发中,遇到数组排序的需求很频繁,这篇文章会介绍几个常见排序思路。
一、希尔排序(性能最好)
如果要从大到小排列,则while(arr[n]>arr[n-interval]&&n>0)。
//希尔排序算法
functionxier(arr){
varinterval=parseInt(arr.length/2);//分组间隔设置
while(interval>0){
for(vari=0;i0){
vartemp=arr[n];
arr[n]=arr[n-interval];
arr[n-interval]=temp;
n=n-interval;
}
}
interval=parseInt(interval/2);
}
returnarr;
}
//Array
vararr=[10,20,40,60,60,0,30]
//打印排序后的数组
console.log(xier(arr))//[0,10,20,30,40,60,60]
二、sort排序(普通数组/数组嵌套对象)
一堆数组排序
//Array
vararr=[10,20,40,60,60,0,30]
//排序方法
arr.sort(function(a,b){
/*
*returnb-a;—>降序排序
*returna-b;—>升序排列
*/
returna-b;
})//括号里不写回调函数则默认按照字母逐位升序排列
//打印排序后的数组
console.log(arr)//[0,10,20,30,40,60,60]
对象数组排序(数组套对象)
//对象数组排序
vararr=[
{name:'syy',age:0},
{name:'wxy',age:18},
{name:'slj',age:8},
{name:'wj',age:20}
];
//排序方法
functioncompare(property){//property:根据什么属性排序
returnfunction(a,b){
varvalue1=a[property];
varvalue2=b[property];
/*
*value2-value1;——>降序
*value1-value2;——>升序
*/
returnvalue1-value2;//升序排序
}
}
//打印排序后的数组
console.log(arr.sort(compare('age')))
/*
0:{name:"syy",age:0}
1:{name:"slj",age:8}
2:{name:"wxy",age:18}
3:{name:"wj",age:20}
*/
三、桶排序
特点:简单,但非常浪费内存,几乎不用。
桶中出现的数组元素都做个标记1,然后将桶数组中有1标记的元素依次打印。
//Array vararr=[] //每个数组项做标记(1) for(leti=0;i四、冒泡排序
性能:一般(需要每项进行比较)。
每一趟找出最大的值。
//Array vararr=[10,20,40,60,60,0,30] /* *总共比较次数为arr.length-1次 *每次的比较次数为arr.length-1次 *依次递减 */ vartemp;//交换变量标识 //两层for分别表示当前项与第二项 for(leti=0;iarr[j+1]){ temp=arr[j] arr[j]=arr[j+1]; arr[j+1]=temp; } } } //打印排序后的数组 console.log(arr)//[0,10,20,30,40,60,60] 五、选择排序
性能:一般(需要每项进行比较)。
假定某个位置的值是最小值,与冒泡排序类似。
//Array vararr=[10,20,40,60,60,0,30] vartemp;//交换变量标识 //两层for分别表示当前项与第二项 for(leti=0;iarr[j]){ temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } //打印排序后的数组 console.log(arr)//[0,10,20,30,40,60,60] 六、插入排序
//Array vararr=[10,20,40,60,60,0,30] //排序算法 for(vari=0;iarr[n+1]&&n>=0){ vartemp=arr[n]; arr[n]=arr[n+1]; arr[n+1]=temp; n--; } } //打印排序后的数组 console.log(arr)//[0,10,20,30,40,60,60] 总结
到此这篇关于JavaScript数组排序的六种常见算法总结的文章就介绍到这了,更多相关JavaScript数组排序常见算法内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。