排序的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"));
注定是蜗牛,就应比别人更努力

浙公网安备 33010602011771号