1、线性查找
数组中查找数据的算法, 比如从数组中找到某个值 ,复杂度为O(n), 思想是,从左开始循环,遇到这个数便停止查找
let num = 8;let arr = [1,2,3,4,5,6,7,8,9,0]function findNum(arr,num){let result = {num: null,index: null}for(let i =0;i<arr.length; i++){if(arr[i] === num){result.num = num;result.index = ibreak;}}return result}console.log(findNum(arr,num))
2、二分查找
二分查找与线性查找不同的是,需要先进行排序,然后与中间数比较,进行二分,直到最终找到目标 二分查找因为每次范围减半,复杂度为O(logn) , 比线性更快,但是要求是必须顺序排列,而且插入数据时不如线性方便
let arr = [1, 2, 6, 3, 8, 2, 0, 5, 7];let num = 2;function findNum(arr, findNum) {let cloneArr = JSON.parse(JSON.stringify(arr));let result = {num: null,index: null,};// 考虑边界if (findNum > Math.max(...arr) || findNum < Math.min(...arr)) return result;// 先排序function findValue(arr, findNum) {// 在中间的时候let midIndex = Math.floor(arr.length / 2);let midValue = arr[midIndex];let n;if (findNum > midValue) {n = findValue(arr.slice(midIndex), findNum);} else if (findNum < midValue) {n = findValue(arr.slice(0, midIndex), findNum);} else if (findNum === midValue) {n = findNum;}return n;}arr = arr.sort((a, b) => a - b);let n = findValue(arr, findNum);result.index = cloneArr.findIndex((el) => el === n);result.num = n;return result;}console.log(findNum(arr, num));
