Mardanjan / Blog

学习笔记(在issues里),一些小demo的源码在这里,demo在线地址会持续更新
1 stars 0 forks source link

JavaScript:二分查找 #32

Open Mardanjan opened 4 years ago

Mardanjan commented 4 years ago
var arr = [1,2,3,4,5,6,7,8,9,10,11,23,44,86]
/**
 * 递归实现:
 * 把数组一分为二,如果分割点的值等于要找的值就直接返回坐标
 * 如果分割点的值小于要找的值,则在分割点右边的数组里找
 * 如果分割点的值大于要找的值,则在分割点左边的数组里找
 */

//  递归
// function binary_search(arr, key, low, high) {
//     if (low > high) {
//         return -1
//     }
//     var mid = parseInt((low + high) / 2)
//     if (arr[mid] === key) {
//         return mid
//     } else if (arr[mid] > key) {
//         return binary_search(arr, key, 0, mid -1)
//     } else if (arr[mid] < key) {
//         return binary_search(arr, key, mid + 1, high)
//     }
// }

/**
 * 蛮力法
 * 
 */
function binary_search(arr, key) {
    var low = 0,
    high = arr.length - 1
    while (low <= high) {
        var mid = parseInt( (low + high) / 2)
        if (arr[mid] === key) {
            return mid
        } else if (arr[mid] < key) {
            low = mid + 1
        } else if (arr[mid] > key) {
            high = mid - 1
        } else {
            return -1
        }
    }
}
// 蛮力法参数
// console.log(binary_search(arr, 2))
// 递归参数
// qwe(binary_search(arr, 5, 0, 13))
Mardanjan commented 4 years ago

奇怪了,蛮力法找不到时返回了undefined。。。不应该是-1吗?