Binary Search 二元搜寻找到特定的答案
Binary Search 二元搜寻找到特定的答案
Categories:
一般二元搜寻,找到特定的答案,不存在回传 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;
}