二分法 O(logN)
function binary_search(arr,item) { var min = 0; let max = arr.length -1; while(min <= max) { let idx = Math.floor(min + max) / 2 if (arr[idx] == item) { return idx } if (arr[idx] < item) { min = idx+1 } else if (arr[idx] > item) { max = idx-1 } } return null }
选择排序 O(N^2)
function findSmallest(arr) {
let ret = arr[0]
for (var i=1,len=arr.length;i<len;i++) {
if (ret > arr[i]) {
ret = arr[i]
}
}
return ret
}
function selectionSort(arr) {
let smallest
let sortArr = []
for (var i = 0,len=arr.length;i<len;i++) {
smallest = findSmallest(arr)
sortArr.push(smallest)
arr.splice(arr.indexOf(smallest), 1)
}
return sortArr
}
//selectionSort([1,35,65,3,5,5,6])
(7) [1, 3, 5, 5, 6, 35, 65]
递归
计算数组的总和
function sum(arr) { let ret = 0 while(arr[0]) { ret += arr[0] arr.splice(0,1) ret += sum(arr) } return ret }
计算数组的个数
function count(arr) { if(arr.length == 0) return false return 1+count(arr.slice(1)) }
返回数组最大的值
function loop_biggest(arr) { if(arr.length === 1) return arr[0] let item = 0 if (arr[0] > item) { item = arr[0] } var big = loop_biggest(arr.slice(1)) return big > item ? big:item }
浙公网安备 33010602011771号