1. 程式人生 > 其它 >軟體相容性測試要考慮什麼?鄭州軟體測試機構推薦

軟體相容性測試要考慮什麼?鄭州軟體測試機構推薦

二分查詢演算法,也稱折半搜尋演算法,是一種在有序陣列中查詢某一特定元素的搜尋演算法。演算法思想是不斷的縮小查詢範圍:

  • 以陣列的中間元素做為分割點,假設變數名為middle;
  • 如果要查詢的元素比arr[middle]大,則在middle的右半邊查詢,否則在middle的左半邊查詢;
  • 重複上面的兩步

相比普通的順序查詢,除了資料量很少的情況下,二分查詢會比順序查詢更快,區別如下所示:

程式碼實現:

function BinarySearch(arr, target) {
    if (arr.length <= 1) return -1
    // 低位下標
    let lowIndex = 0
    // 高位下標
    let highIndex = arr.length - 1

    while (lowIndex <= highIndex) {
        // 中間下標
        const midIndex = Math.floor((lowIndex + highIndex) / 2)
        if (target < arr[midIndex]) {
            highIndex = midIndex - 1
        } else if (target > arr[midIndex]) {
            lowIndex = midIndex + 1
        } else {
            // target === arr[midIndex]
            return midIndex
        }
    }
    return -1
}

 

另一個版本:

function binarySearch(arr,l,r,target){
    if(l> r){
        return -1;
    }
    let mid = l + Math.floor((r-l)/2)
    if(arr[mid] === target){
        return mid;
    }else if(arr[mid] < target ){
        return binarySearch(arr,mid + 1,r,target)
    }else{
        return binarySearch(arr,l,mid - 1,target)
    }
}

  

如果陣列中存在重複項,而我們需要找出第一個指定的值,實現則如下:  

function BinarySearchFirst(arr, target) {
    if (arr.length <= 1) return -1
    // 低位下標
    let lowIndex = 0
    // 高位下標
    let highIndex = arr.length - 1

    while (lowIndex <= highIndex) {
        // 中間下標
        const midIndex = Math.floor((lowIndex + highIndex) / 2)
        if (target < arr[midIndex]) {
            highIndex = midIndex - 1
        } else if (target > arr[midIndex]) {
            lowIndex = midIndex + 1
        } else {
            // 當 target 與 arr[midIndex] 相等的時候,如果 midIndex 為0或者前一個數比 target 小那麼就找到了第一個等於給定值的元素,直接返回
            if (midIndex === 0 || arr[midIndex - 1] < target) return midIndex
            // 否則高位下標為中間下標減1,繼續查詢
            highIndex = midIndex - 1
        }
    }
    return -1
}