我的二分查找仅适用于单个数字。我正在尝试运行一个非常简单的 React 程序来可视化二分搜索,但目前基本搜索不起作用。以下是该代码的所有重要部分。
function binarySearch(arr, val) {
let start = 0;
let end = arr.length - 1;
while (start <= end) {
let mid = Math.floor((start + end) / 2);
if (arr[mid] === val) {
return mid;
}
if (val < arr[mid]) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return -1;
}
export const BinarySearch = () => {
const [outputArea, setOutputArea] = useState('');
const runSearch = (arr, x) => {
const searched = binarySearch(arr, x);
setOutputArea(searched + 1);
}
return (
<div>
Enter List: <input type="text"
id="listEntry" />
Enter Number: <input type="text"
id="numberEntry" />
<button type="button"
onClick={(e) => runSearch(document.getElementById("listEntry").value.split(","), document.getElementById("numberEntry").value)}
></button>
<textarea name="output" cols="30" rows="10" value={outputArea}></textarea>
</div>
);
我尝试查看不同版本的搜索,但没有可用的选项有效。只要目标数字是单个数字,数组的长度并不重要。
function binarySearch(arr, val) {
let start = 0;
let end = arr.length - 1;
while (start <= end) {
let mid = Math.floor((start + end) / 2);
if (arr[mid] === val) {
return mid;
}
if (val < arr[mid]) {
end = mid - 1;
} else {
start = mid + 1;
}
}
return -1;
}
const runSearch = (arr, x) => {
return binarySearch(arr, x);
setOutputArea(searched + 1);
}
<div>
Enter List: <input type="text" id="listEntry" /> Enter Number: <input type="text" id="numberEntry" />
<button type="button" onclick="document.getElementById('output').value = runSearch( document.getElementById('listEntry').value.split(','), document.getElementById('numberEntry').value)">Search</button>
<textarea id="output" name="output" cols="30" rows="10"></textarea>
</div>
用户输入类型是字符串,您是否尝试将输入解析为整数?