首页 > 代码库 > 数组排序相关
数组排序相关
1.sort 方法
sort()对数组排序,不开辟新的内存,对原有数组进行调换,即影响原数组。
1.1简单排序
<script> var arr=new Array(1,5,4,3); arr.sort(); console.log(arr.join); //[1,3,4,5]; </script>
问题: 由简单数字组成的数组不可以用这种方法排序
例如:var arr=[12,3,44,5];
console.log(arr.sort());
结果是: [12,3,44,5];
因为js默认比较函数是把要排序的元素都视为字符串,不能在比较这些元素之前先检测他们的类型,所以按字符串排序。
1.2自定义排序
<script> var arr=new Array(1,5,4,3); arr.sort(function(a,b){ return b-a; }); console.log(arr); </script>
a,b表示数组中的任意两个元素,如果返回值大于0,b在前,a在后,按从大到小排序。
返回值小于0,b在后,a在前,按从小到大排序。
return a-b 按从小到大排序,b-a按从大到小排序。
参考文章:http://www.cnblogs.com/longze/archive/2012/11/27/2791230.html
2.冒泡排序
function bubbleSort(array){ var i=0,len=array.length,j,d; for(;i<len;i++){ for(var j=0;j<len;j++){ if(array[i]<array[j]){ d=array[i];array[j]=array[i];array[i]=d; } } } return array; }
3.插入排序 从下标1开始 每增1项排序依次,越往后遍历次数越多
var arr=[1,6,4,3,8]; function sort1(array){ var len=array.length,i,j,tmp,result; //设置数组副本 result=array.slice(0); for(var i=1;i<len;i++){ tmp=array[i]; j=i-1; while(j>=0 && tmp<result[j]){ result[j+1]=result[j]; j--; } result[j+1]=tmp; } return result; }
4.二分法插入排序
//现在有序区通过二分查找的方法找到移动元素的起始位置,然后通过这个起始位置将后面的所有元素后移。
function sort2(array){ var len=array.length,i,j,tmp,low,high,mid,result; result=array.slice(0); for(var i=0;i<len;i++){ tmp=result[i]; low=0; high=i-1; while(low<=high){ mid=parseInt((low+high)/2,10); if(tmp<result[mid])high=mid-1; else low=mid+1; } for(var j=i-1;j>high+1;j--){ result[j+1]=result[j]; } result[j+1]=tmp; } return result; }
还有很多,今天先学习到这里。原文请戳这里:http://www.jianshu.com/p/7e6589306a27
数组排序相关
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。