算法图解-学习笔记-javascript

Posted on 2022-07-28 14:14  周山答  阅读(29)  评论(0)    收藏  举报

二分法 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
}