冒泡排序:
每次从数组中拿出两位来进行排序,大的放在后边,小的放在前边。当然也可以小的在后面,大的在前面。以下以从小到大排序作为例子。
var arr=[2,6,4,5,1]
function bubbleSort(arr){
for(var i = 0; i < arr.length - 1; i++){
var isSort = true;//判断是否需要进行排序
for(var j = 0; j < arr.length - 1; j++){
var a = arr[j];
var b = arr[j + 1];
if(a > b){
isSort = false;
arr[j] = b;
arr[j+1] = a;
}
}
if(isSort){
return arr;
}
}
return arr;
}
快速排序
冒泡排序有个缺点就是至少比较arr.length-1次,比较繁琐。快速排序法比冒泡排序比较的次数要更少点。思路如下所示:
var arr = [5,12,2,7,6,10,11];
function quickSort(arr){
//如果数组已经全部分隔为1位数组,说明已经排序完成,可以返回数组
if(arr.length <= 1){
return arr;
}
//将中心值取出,作为分组的依据
var nub = arr.splice(Math.floor(arr.length/2),1);
var left = [];
var right = [];
for(var i = 0; i < arr.length; i++){
if(arr[i] > nub[0]){
right.push(arr[i]);
} else {
left.push(arr[i]);
}
}
//排序完成后将数组进行拼接
return quickSort(left).concat(nub,quickSort(right));
}
数组去重
方法一:
var arr = [12,0,12,7,0,12,0,11,12];
var arr2 = [];
for(var i = 0; i < arr.length; i++){
var isHas = false;//默认新数组中没有包含 arr[i]这一位
for(var j = 0; j < arr2.length; j++){
if(arr2[j] == arr[i]){
isHas = true;
}
}
if(!isHas){
arr2.push(arr[i]);
}
}
方法二(fliter方法):
var arr = [12,0,12,7,0,12,0,11,12];
var arr2 = arr.filter(function(data,index){
for(var i = index ; i < arr.length; i++){
if(arr[i] == data){
return false;//去除该位
}
}
return true;//保留该位
});
方法三:
var arr = [12,0,12,7,0,12,0,11,12];
var obj = {};
var arrNew=[];
for(var i = 0; i < arr.length; i++){
//利用对象的属性名唯一,相同的会前后覆盖
obj[arr[i]] = true;
}
for(var s in obj){
//将对象里的属性名提取出来,完成去重
arrNew.push(s);
}
console.log(arrNew);
方法四
var arr = [12,0,12,7,0,12,0,11,12];
for(var i = 0; i < arr.length; i++){
if(arr.indexOf(arr[i],i+1) >= 0){
arr.splice(i,1);//将相同的数值去除
i--;//保证每次循环都是从0开始
}
}
console.log(arr);