joken-前端工程师

  :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::

二分算法搜索数字

二分搜索算法是一种在有序数组中查找目标值的高效方法。其时间复杂度为 (O(\log n))。下面是用 JavaScript 实现的二分搜索算法:

function binarySearch(arr, target) {
    let left = 0;
    let right = arr.length - 1;

    while (left <= right) {
        let mid = Math.floor((left + right) / 2);

        if (arr[mid] === target) {
            return mid; // 找到目标值,返回其索引
        } else if (arr[mid] < target) {
            left = mid + 1; // 目标值在右半部分
        } else {
            right = mid - 1; // 目标值在左半部分
        }
    }

    return -1; // 未找到目标值
}

// 示例使用
const array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
const target = 7;
const result = binarySearch(array, target);

if (result !== -1) {
    console.log(`目标值 ${target} 在数组中的索引为: ${result}`);
} else {
    console.log(`目标值 ${target} 不在数组中`);
}

这个函数 binarySearch 接受一个有序数组 arr 和一个目标值 target,如果找到目标值,返回其在数组中的索引,否则返回 -1。示例代码演示了如何使用这个函数进行二分搜索。

二分算法搜索字母

是的,二分搜索算法不仅可以用于查找数字,还可以用于查找字符或字符串,只要数组是有序的。以下是一个用 JavaScript 实现的在有序字符数组中查找目标字符的二分搜索算法:

function binarySearch(arr, target) {
    let left = 0;
    let right = arr.length - 1;

    while (left <= right) {
        let mid = Math.floor((left + right) / 2);

        if (arr[mid] === target) {
            return mid; // 找到目标值,返回其索引
        } else if (arr[mid] < target) {
            left = mid + 1; // 目标值在右半部分
        } else {
            right = mid - 1; // 目标值在左半部分
        }
    }

    return -1; // 未找到目标值
}

// 示例使用
const array = ['a', 'b', 'c', 'd', 'e', 'f', 'g'];
const target = 'd';
const result = binarySearch(array, target);

if (result !== -1) {
    console.log(`目标字符 ${target} 在数组中的索引为: ${result}`);
} else {
    console.log(`目标字符 ${target} 不在数组中`);
}

这个函数 binarySearch 处理字符数组和数字数组的方式相同,因为在 JavaScript 中,字符可以通过比较运算符(例如 <===)进行比较。确保数组是有序的,这样二分搜索才能正常工作。

总结

二分搜索算法要求数组是有序的。对于字符串数组,这种顺序通常是字母顺序(字典顺序)。这是因为二分搜索依赖于数组的有序性来有效地减少搜索范围。

有序数组的排序可以是数字或字母,甚至是更复杂的对象,只要有一种可以比较元素大小的排序规则。对于字符串,排序通常基于字典顺序,即按字母顺序排列。

posted on 2024-07-13 20:50  joken1310  阅读(1)  评论(0编辑  收藏  举报