常见算法(js)

29 阅读1分钟

不管在实际项目中都会遇到算法问题 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

}