顺序搜索:顺序或线性搜索是最基本的搜索算法。它的机制是将每一个数据结构中的元素和我们要找的元素作比较。顺序搜索是最低效的一种搜索算法。
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 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)。