二分法查找
对于包含n个元素的列表,用二分法查找需要log2n步骤
仅当列表有序时,二分法才生效
非递归版本
const binarySearch = (word, arr) => {
let start = 0, last = arr.length - 1;
while(start <= last) {
let mid = Math.floor((start + last) / 2)
let temp = arr [mid]
if(temp === word) {
return mid
}else if(temp > word ){
last = mid - 1
}else {
start = mid + 1
}
}
return -1
}
const numberList = [1,2,3,4,5]
console.log('>>>>>', binarySearch(3, numberList))
递归版本
const binarySearch = (word, arr) => {
let start = 0, last = arr.length - 1;
let mid = -1
const df = (first, end) => {
if(first > end) {
mid = -1
return mid
}
mid = Math.floor((first + end) / 2)
if(arr[mid] === word) {
return mid
}else if(arr[mid] > word) {
df(first, mid-1)
}else if(arr[mid] < word) {
df(mid + 1, end)
}
}
df(start, last)
return mid
}
快速排序法
const quickSort = (arr) => {
if(arr.length <= 1 ) return arr
let left = [], right = [], start = arr[0];
for (let i = 1; i < arr.length; i++) {
if(arr[i] > start) {
right.push(arr[i])
}else {
left.push(arr[i])
}
}
return [...quickSort(left), start, ...quickSort(right)]
}
console.log(quickSort([3,4,5,3,2,1,56]))