搜索算法
顺序搜索:顺序或线性搜索是最基本的搜索算法。它的机制是将每一个数据结构中的元素和我们要找的元素作比较。顺序搜索是最低效的一种搜索算法。
function sequentialSearch(arr,val){
for(let i = 0;i < arr.length;i++){
if(val == arr[i]){
return i
}
}
return -1
}
二分搜索:这种算法要求被搜索的数据结构已排序。以下是该算法遵循的步骤。
- 选择数组的中间值。
- 如果选中值是待搜索值,那么算法执行完毕。
- 如果待搜索值比选中值要小,则返回步骤1并在选中值左边的子数组中寻找(较小)。
- 如果待搜索值比选中值要大,则返回步骤1并在选中值右边的子数组中寻找(较大)。
function binarySearch(arr,val){
const sortArr = quickSort(arr)
let lowIndex = 0
let highIndex = sortArr.length - 1
while(lowIndex <= highIndex){
let mid = Math.floor((lowIndex + highIndex) / 2)
if(val > sortArr[mid]){
lowIndex = mid + 1
}else if(val < sortArr[mid]){
highIndex = mid -1
}else{
return mid
}
}
return -1
}
内插搜索:是改良版的二分搜索。
随机算法:它的含义是迭代数组,从最后一位开始并将当前位置和一个随机位置进行交换。这个随机位置比当前位置小。这样可以保证随机过的位置不会再随机一次。
function swap(arr,xI,yI){
let res = arr[xI]
arr[xI] = arr[yI]
arr[yI] = res
return arr
}
function shuffle(arr){
for(let i = arr.length - 1;i > 0;i--){
const randomIndex = Math.floor(Math.random() * (i + 1))
swap(arr,i,randomIndex)
}
}
注:我觉得const randomIndex = Math.floor(Math.random() * (i + 1))有些问题,应该是const randomIndex = Math.floor(Math.random() * i)。
以自己现在的努力程度,还没有资格和别人拼天赋

浙公网安备 33010602011771号