不管在实际项目中都会遇到算法问题
1.冒泡排序
var example = [3,42,5,76,8,9,0,1,3,50,6] function sortarr(arr){ var len= arr.length for(i =0;i<len-1;i++){ for(j= 0;j<len-1-i;j++){ if(arr[j]>arr[j+1]){ var temp = arr[j] arr[j] = arr[j+1] arr[j+1] =temp } } } return arr; } sortarr(example)
快排
function quickSort(arr){
if(arr.length<=1){
return arr;
}
var left =[],right = [],current= arr.slice(0,1);
for(let i =0;i<arr.length;i++){
if(arr[i]<current){
left.push(arr[i])
}else{
right.push(arr[i])
}
}
return quickSort(left).concat(current,quickSort(right))
}
2.
function quickSort(arr,l,r){
if(l<r){
var i =l,j=r,x = arr[i];
while(i<j){
while(i<j && arr[j]>x){
j--;
if(i<j){
//这里用i++,被换过来的必然比x小,赋值后直接让i自加,不用再比较,可以提高效率
arr[i++]= arr[j]
while(i<j && arr[i]<x){
i++;
if(i<j){
//这里用j--,被换过来的必然比x大,赋值后直接让j自减,不用再比较,可以提高效率
arr[j--] = arr[i]
}
arr[i]=x;
quickSort(arr, l, i-1);
quickSort(arr, i+1, r);
}
}
}
}
}
}
二路归并
将两个按值有序序列合并成一个按值有序序列,则称之为二路归并排序
function marge(left,right){
var result =[];
il=0;
ir=0;
while(il<left.length && ir<right.length){
if(left[il]<right[ir]){
result.push(left[i]++);
}else{
result.push(right[i]++);
}
}
去重
利用object中的key的唯一性
function unique(arr){
var obj = {}
var data = []
for(var i in arr){
if(!obj[arr[i]]){
obj[arr[i]] = true;
data.push(arr[i])
}
}
return data
}