Binary Search 二元搜寻找到特定的答案

Binary Search 二元搜寻找到特定的答案

一般二元搜寻,找到特定的答案,不存在回传 false

程式范例

JavaScript

function BinarySearch(searchNumberArray, searchNumber) {
    // 左侧指标
    var leftNumberPointer = 0;
    // 右侧指标
    var rightNumberPointer = searchNumberArray.length - 1;
    while (leftNumberPointer <= rightNumberPointer) {
        // 中间指标
        var middleNumberPointer = Math.floor((rightNumberPointer + leftNumberPointer) / 2);
        // 中间指标数字
        var middleNumber = searchNumberArray[middleNumberPointer];
        if (searchNumber == middleNumber) {
            // 如果「要找的数字」与「中间指标数字」相同
            // 找到了,回传这个数字指标位置
            return middleNumberPointer;
        }
        else if (searchNumber < middleNumber) {
            // 如果「要找的数字」小于「中间指标数字」
            // 表示「中间指标」右边的所有数字都"大于"「要找的数字」
            // 所以将「右侧指标」移动到目前「中间指标 - 1」的位置
            rightNumberPointer = middleNumberPointer - 1;
        }
        else {
            // 如果「要找的数字」大于「中间指标数字」
            // 表示「中间指标」左边的所有数字都"小于"「要找的数字」
            // 所以将「左侧指标」移动到目前「中间指标 + 1」的位置
            leftNumberPointer = middleNumberPointer + 1;
        }
    }
    // 如果都没有找到,回传 false
    return false;
}

TypeScript

function BinarySearch(searchNumberArray: number[], searchNumber: number){
    // 左侧指标
    let leftNumberPointer: number = 0;
    // 右侧指标
    let rightNumberPointer: number = searchNumberArray.length - 1;

    while (leftNumberPointer <= rightNumberPointer) {
        // 中间指标
        let middleNumberPointer = Math.floor((rightNumberPointer + leftNumberPointer) / 2);
        // 中间指标数字
        let middleNumber = searchNumberArray[middleNumberPointer];
        if (searchNumber == middleNumber) {
            // 如果「要找的数字」与「中间指标数字」相同
            // 找到了,回传这个数字指标位置
            return middleNumberPointer;
        } else if (searchNumber < middleNumber) {
            // 如果「要找的数字」小于「中间指标数字」
            // 表示「中间指标」右边的所有数字都"大于"「要找的数字」
            // 所以将「右侧指标」移动到目前「中间指标 - 1」的位置
            rightNumberPointer = middleNumberPointer - 1;
        } else {
            // 如果「要找的数字」大于「中间指标数字」
            // 表示「中间指标」左边的所有数字都"小于"「要找的数字」
            // 所以将「左侧指标」移动到目前「中间指标 + 1」的位置
            leftNumberPointer = middleNumberPointer + 1;
        }
    }

    // 如果都没有找到,回传 false
    return false;
}

参考资料