排序的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"));

  

 

 

posted @ 2017-03-02 10:29  张一昕  阅读(739)  评论(0编辑  收藏  举报