数组的排序
var arr = [];
for(var i=0;i<20;i++){
arr.push(Math.floor(Math.random()*100))
}
//生成一个无序的arr数组
function sort(arr,start,end){
//数组长度为1
if(start == end ){
return [arr[start]]
}else if(start == end-1){
//数组长度为2,根据数值大小 来排序
if(arr[start]>arr[end]){
return [arr[end],arr[start]]
}else{
return [arr[start],arr[end]]
}
}
// 数组长度一半
var l = Math.floor((start+end)/2);
//左边数组
var arrLeft = sort(arr, start,l);
//右边数组
var arrRight = sort(arr,l+1,end);
//返回结果
var result = [];
//分割成两部分 左右两个数组 只比对数组中的第一个数,那个数值小就把谁放到结果里面,并把小的数值删除掉,固采用数组中的shift方法。一旦出现左边数组或右边数组,没有数据的时候
//result数组就与还有数据的数组合并 采用 concat,并返回结果
while(arrLeft.length>0 || arrRight.length>0){
if(arrLeft.length==0){
result = result.concat(arrRight);
break;
}else if(arrRight.length==0){
result = result.concat(arrLeft);
break;
}
if(arrLeft[0]<arrRight[0]){
result.push(arrLeft.shift())
}else{
result.push(arrRight.shift());
}
}
return result;
}
var arrSort = sort(arr,0,arr.length-1);//参数 数组,开始位置,结束位置
document.write(arr+‘<br/>‘+arrSort);
数据去重
var arr = [];
for(var i=0;i<20;i++){
arr.push(parseInt(Math.random()*10));
}
Array.prototype.indexOf = function(n){
for(var i=0;i<this.length;i++){
if(this[i] == n){
return i;
}
}
return -1;
}
function removeDup(arr,s,e){
if(s==e){
//分割就剩下一个
return [arr[s]]
}else if(s==e-1){
//为了优化 剩下两个就不用分割啦
if(arr[s]==arr[e]){
return [arr[s]]
}else{
return [arr[s],arr[e]];
}
}
//数组平分成两段,
var l = Math.floor((s+e)/2);
//左边
var arrL = removeDup(arr,s,l);
//右边
var arrR = removeDup(arr,l+1,e);
//结果 先把左边的复制进去
var result = arrL;
//循环 将不重复的数据插入到结果里面
for(var i=0;i<arrR.length;i++){
if(result.indexOf(arrR[i])== -1 ) result.push(arrR[i])
}
return result; //返回结果
}
var arrDup = removeDup(arr, 0, arr.length-1);
document.write(arr+‘<br/>‘+arrDup);
转自http://www.jb51.net/article/42090.htm