搜索算法

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

function sequentialSearch(arr,val){
    for(let i = 0;i < arr.length;i++){
        if(val == arr[i]){
            return i
        }
    }
    return -1
} 

二分搜索:这种算法要求被搜索的数据结构已排序。以下是该算法遵循的步骤。

  1.  选择数组的中间值。
  2. 如果选中值是待搜索值,那么算法执行完毕。
  3. 如果待搜索值比选中值要小,则返回步骤1并在选中值左边的子数组中寻找(较小)。
  4. 如果待搜索值比选中值要大,则返回步骤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)。

posted @ 2020-07-03 21:35  671_MrSix  阅读(191)  评论(0编辑  收藏  举报