js二维数组排序

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <title> New Document </title>
  <meta name="Generator" content="EditPlus">
  <meta name="Author" content="">
  <meta name="Keywords" content="">
  <meta name="Description" content="">
  <script type="text/javascript">
  <!--
	 
	function getCard(m){
		var ret = [], rnd; 
		for(var i = 0; i < m; i++){
			rnd = Math.floor(Math.random()*(i+0.9999));
			ret[i] = ret[rnd];
			ret[rnd] = i
		}
		return ret;
	}
	
	var data = [];
	{
		for(var i = 0; i < 100; i ++){
			data.push(getCard(10));
		}
	}
	// 二维数据排序
	function mySort(array, col, ord, b, e){
		if(array.length == 0) return;
		//document.write("排序前"+array);
		var t = [], s, i, curCol = col[0];
		for(i = b; i < e; i ++){
			s = new String(array[i][curCol]);
			s._obj = array[i];
			t.push(s)
		}
		t.sort();
		if(ord[0] == "des"){
			t.reverse();
		}
		for(i = 0; i < e - b; i++){
			//document.write("<br/>");
			//document.write(array[i]);
			//document.write("<br/>");
			//document.write(t[i]._obj);
			//document.write("<br/>");
			//document.write(t[i]._obj == array[b+i]);
			array[b+i] = t[i]._obj;
		}
		//document.write("排序后====================<br/>")
		//print(array);
		var begin, end;
		if(col.length > 1){
			col.shift();
			ord.shift();
			begin = b;
			for(i = b; i < e - b - 1; i++){
				if( array[i][curCol] != array[i+1][curCol] ){
					end = i+1;
					//document.write("begin="+begin+"end="+end+"<br/>");
					mySort(array,col,ord,begin,end);
					begin = end;
				}
			}
			if(begin != e){
				mySort(array,col,ord,begin,e);
			}
		}

		//document.write("<br/>");
		//document.write("排序后"+array);
	}
	function print(data){
		for(var i = 0; i < data.length; i++){
			document.write(data[i]+"<br/>");
		}
	}
	document.write("排序前====================<br/>");
	print(data);
	var b = new Date().getTime();;
	mySort(data, [0,1,2],['asc','des','asc'],0,data.length); 
	document.write("用时"+(new Date().getTime() - b));
	document.write("排序后====================<br/>")
	print(data);
  //-->
  </script>
 </head>

 <body>
  
 </body>
</html>


posted @ 2013-04-26 20:01  javawebsoa  Views(249)  Comments(0)    收藏  举报