排序的4种方式
排序的三种方式,冒泡排序,选择排序,插入排序,快速排序,为了不改变原数组,定义了copy函数
//数组的排序 拷贝数组 function copy(arr){ var newarr=[]; for(var i in arr){ newarr[i]=arr[i]; } return newarr; }
//冒泡排序 var arr=[5,8,3,2,4,1,7,6,9,0]; function order(arr,type){ var type=type||"min"; var newarr=copy(arr); var le=newarr.length; for(var i=0;i<le;i++){ for(var j=i+1;j<le;j++){ if(type=="max"){ if(newarr[i]>newarr[j]){ var temp=newarr[i]; newarr[i]=newarr[j]; newarr[j]=temp; } }else if(type=="min"){ if(newarr[i]<newarr[j]){ var temp=newarr[i]; newarr[i]=newarr[j]; newarr[j]=temp; } } } } return newarr; } console.log(order(arr,"max"));
//选择排序 var arr=[5,8,3,2,4,1,7,6,9,0]; function selectOrder(arr){ var newarr=copy(arr); var le=newarr.length,temp, minIndex; for(var i=0;i<le;i++){ minIndex=i; for(var j=i+1;j<le;j++){ if(newarr[j]<newarr[minIndex]){ minIndex=j; } } temp=newarr[minIndex]; newarr[minIndex]=newarr[i]; newarr[i]=temp; } return newarr; } console.log(selectOrder(arr));
//插入排序 var arr=[5,8,3,2,4,1,7,6,9,0]; function inserOrder(arr){ var newarr=copy(arr); var le=newarr.length; for(var i=1;i<le;i++){ var pre=i-1; var curr=newarr[i]; while(pre>=0&&curr<newarr[pre]){ newarr[pre+1]=newarr[pre]; pre--; } newarr[pre+1]=curr; } return newarr; } console.log(inserOrder(arr));
快速排序,我们看看一个小例子,5个宽度不同的盒子,每个盒子上标有不同的数字,将这5个盒子排序,并且数字跟着盒子变化
样式
<style> div{ background:red; margin:10px 10px; text-align: center; line-height: 30px; } .div1{ width:300px; height: 30px; } .div2{ width:90px; height: 30px; } .div3{ width:30px; height: 30px; } .div4{ width:130px; height: 30px; } .div5{ width:230px; height: 30px; } </style>
body中
<body> <div class="div1">1</div> <div class="div2">2</div> <div class="div3">3</div> <div class="div4">4</div> <div class="div5">5</div> </body>
在js中
<script> function copy(arr){ var newarr=[]; for(var i in arr){ newarr[i]=arr[i]; } return newarr; } var div=document.getElementsByTagName('div'); var arr=[]; for(var i=0;i<div.length;i++){ arr.push(div[i]); } var newarr=copy(arr); function order(arr,callback){ var len=newarr.length; for (var i = 0; i < newarr.length; i++) { for(var j=i+1;j<len;j++){ if (callback(newarr[i],newarr[j])) { var temp=newarr[i]; newarr[i]=newarr[j]; newarr[j]=temp; } } } return newarr; } order(newarr,function(a,b){ return a.offsetWidth>b.offsetWidth; }) document.body.childNodes=null; for(var j=0;j<newarr.length;j++){ document.body.append(newarr[j]); } </script>
可以用原型方式实现数组的排序
<script> function myArray(){ for(var i in arguments){ this[i]=arguments[i]; } this.length=arguments.length; } myArray.prototype={ getValue:function(type){ var type=type||"min"; var temp=this[0]; for(var i=0;i<this.length;i++){ if(type=="min"){ if(temp>this[i]){ temp=this[i]; } }else if(type=="max"){ if(temp<this[i]){ temp=this[i]; } } } return temp; }, sort:function(callback){ var newarr=[]; for(var i=0;i<this.length;i++){ newarr.push(this[i]); } for (var i=0;i<newarr.length;i++) { for (var j=i+1;j<newarr.length;j++) { if(callback(newarr[i],newarr[j])){ temp=this[i]; this[i]=this[j]; this[j]=temp; } } } return newarr; } } var arr1=new myArray(213,345,97,90,87); console.log(arr1.sort(function(a,b){ return a>b; })); // console.log(arr1.getValue("min"));
注定是蜗牛,就应比别人更努力