排序算法
function bsearch (list,item) { //有序队列的二分查找 let lindex = 0 let hindex = list.length-1 let mid while (lindex<=hindex) { mid = Math.floor(lindex+(hindex-lindex)/2) let guess = list[mid] if(guess==item){ return mid }else if(guess>item){ hindex = mid - 1 }else{ lindex = mid + 1 } } return null } let a = [1,3,5,7,9] let b = bsearch (a,3) let c = bsearch (a,-1) console.log(b,c) function selectSort (arr) {//选择排序 循环找最大或者最小 let index for(let i = 0;i<arr.length;i++){ index = i for(let j = i+1;j<arr.length;j++){ if(arr[index] > arr[j]){ index = j } } let temp = arr[i] arr[i] = arr[index] arr[index] = temp } return arr } console.log(selectSort ([3,7,2,4,5,6,4,2,4,7,9,0])) function fact (n) {//阶乘函数 n! 递归 if(n===1){ return 1 }else{ return n*fact(n-1) //每次递归结果的n变量都会保存在内存中 (每次递归中都会额外保留引用到的变量==>占用内存) } } function newfact (n,a=1) {//尾递归 if(n===1){ return a }else{ return newfact (n-1,a*n) //函数不存在占用内存的n变量,因为每次递归结果的n变量已经变成参数传入下一次递归的函数中 } } console.log(fact (10)) console.log(newfact (10)) function sum (arr) {//递归求和 if(arr.length===0){ return 0 }else if(arr.length===1){ return arr[0] }else{ let num = arr.shift() return num + sum(arr) } } let total = sum ([1,2,3,4,5,6,7,8,9]) console.log(total) function biggest (arr) {//递归求最大数字 if(arr.length===0){ return null }else if(arr.length===1){ return arr[0] }else{ if(arr[0]<arr[1]){ arr.splice(0,1) }else{ arr.splice(1,1) } return biggest (arr) } } let bigarr = [2,4,6,8] console.log(biggest (bigarr)) function quicksort (arr) { if(arr.length<2){ return arr }else{ let left = [] let right = [] let std = arr.shift() for(let i in arr){ if(arr[i]<std){ left.push(arr[i]) }else{ right.push(arr[i]) } } return quicksort (left).concat([std],quicksort (right)) } } console.log(quicksort ([3,7,2,4,5,6,4,2,4,7,9,0]))