您的位置:首页 > Web前端 > JavaScript

javascript中排序的方法

2017-07-24 23:28 369 查看
插入排序

原理:把元数组中的第一项拿出来放在新数组中,在对原数组进行循环和新数组中的每一项对比,如果原数组中的这一项比新数组中的每一项都小,则放到新数组中的第一项,相反这放在新数组最后。
var ary=[5,9,7,3,4,8,2];
function paixu(ary){
var newary=[];
newary.push(ary[0]);
console.log(newary);
for(var i=1;i<ary.length;i++){
for(var j=newary.length-1;j>=0;){
if(ary[i]<newary[j]){
j--;
if(j===-1){
newary.unshift(ary[i]);
}
}else{
newary.splice(j+1,0,ary[i]);
j=-1
}
}
}
return newary;
}
paixu(ary);
console.log(paixu(ary));


快速排序

原理:把原数组的长度去中间值,之后把中间的那个值记录下来cur,之后把原数组中剩下的值循环和cur比较,如果大于cur就放在右边,小于就放在左边,之后再对左右两边的值进行快速排序,之后cur的两边的值是一个为止,结束排序。
<script>
var ary=[19,14,11,18,16,15,17];
function quicksort(ary){
if(ary.length<=1){
return ary;
}
var index= Math.floor(ary.length/2);
var cur=ary.splice(index,1)[0];

var left=[];
var right=[];
for(var i=0;i<ary.length;i++){
ary[i]>cur?right.push(ary[i]):left.push(ary[i]);
};
return quicksort(left).concat([cur],quicksort(right));
};
console.log(quicksort(ary))
</script>


sort排序:只可以排数字
<script>
var ary=[4,3,5,2,6,1];
ary.sort(function(a,b){return a-b;});
console.log(ary)
</script>


冒泡排序

原理:原数组中的第一个小于第二个,不做操作,如果第一个大于第二个,那么交换二者的位置
<script>
var ary=[4,5,3,6,2,1,8];
function sort(ary) {
var flag=false;
for(var i=0;i<ary.length-1;i++){
for(var j=0;j<ary.length-i-1;j++){
if(ary[j]>ary[j+1]){
ary[j]=ary[j]+ary[j+1];
ary[j+1]=ary[j]-ary[j+1];
ary[j]=ary[j]-ary[j+1];
flag=true;//只要本轮有交换的就让flag=true
}
}
if(flag){//flag==true上一轮有交换的,继续执行下一轮 让flag从新的赋值false
flag=false;
}else{//上一轮没有交换,已经排好了,直接结束循环即可
break;
}
}
return ary;
}
console.log(sort(ary))
</script>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: