【算法导论】二分查找

简介: 1. 描述(查找算法):   输入:n个数的一个序列 A = (a1, a2, a3,.....an)和一个值v   输出:下表 i 使得 v=A[i] 或者 v 不在A中出现时,输出 NIL   二分查找的前提是A必须是有序序列, 以下全部假设是A是非降序序列 2.

1. 描述(查找算法):

  输入:n个数的一个序列 A = (a1, a2, a3,.....an)和一个值v

  输出:下表 i 使得 v=A[i] 或者 v 不在A中出现时,输出 NIL

  二分查找的前提是A必须是有序序列, 以下全部假设是A是非降序序列

2. 图解

  

3. 伪代码

  

//用递归
BINARY_SEARCH(A, v, low, high)
    if(low <= high)
        mid = (low+high)/2  //向下取整
        if v == A[mid]
            return mid;
        else if v < A[mid]
            return BINARY_SEARCH(A, v, low, mid-1)
        else if v > A[mid]
            return BINARY_SEARCH(A, v, mid+1, high)
  return NIL

//用循环
BINARY_SEARCH(A, v)
    low = 1
    high = A.length
    while low <= high
        mid = (low + high)/2 //向下取整
        if v == A[mid]
            return mid
        else if v < A[mid]
            high = mid -1
        else if v > A[mid]
            low = mid +1
  
return NIL

4. 代码实现

java

//用循环
    int binarySearch1(int[] A, int v){
        int low = 0;
        int high = A.length;
        while (low <= high) {
            int mid = (low + high)/2;
            if (v == A[mid])
                return mid;
            else if (v < A[mid])
                high = mid - 1;
            else if (v > A[mid])
                low = mid + 1;
        return -1;
    }

    //用递归
    int binarySearch2(int[] A, int v,  int low, int high) {
        if (low <= high) {
            int mid = (low + high)/2;
            if (v == A[mid])
                return mid;
            else if (v < A[mid])
                return binarySearch2(A, v, low, mid - 1);
            else if (v > A[mid])
                return binarySearch2(A, v, mid + 1, high);
        return -1;
    }

python

# 用循环
def binary_search1(nums, v):
    low = 0
    high = len(nums)
    while low <= high:
        mid = int((low + high) / 2)
        if v == nums[mid]:
            return mid
        else:
            if v <= nums[mid]:
                high = mid - 1
            else:
                if v > nums[mid]:
                    low = mid + 1
    return -1


# 用递归
def binary_search2(nums, v, low, high):
    if low <= high:
        mid = int((low + high) / 2)
        if v == nums[mid]:
            return mid
        else:
            if v < nums[mid]:
                return binary_search2(nums, v, low, mid - 1)
            else:
                if v > nums[mid]:
                    return binary_search2(nums, v, mid + 1, high)
    return -1

 

C语言

//用循环 
 int binary_search1(int arr[], int v, int len)
 {
     int low, mid, high;
     low = 0, high = len-1;
     while (low <= high)
     {
         mid = (low + high) / 2;
         if (v == arr[mid])
             return v;
         else if (v > arr[mid])
             low = mid + 1;
         else if (v < arr[mid])
             high = mid -1;
     }
     return -1;
 }
 
 //用递归 
 int binary_search2(int arr[], int v, int low, int high)
 {
     int mid;
     if (low <= high)
     {
         mid = (low + high) / 2;
         if (v == arr[mid])
             return v;
         else if (v > arr[mid])
             return binary_search2(arr, v, mid + 1, high);
         else if (v < arr[mid])
             return binary_search2(arr, v, low, mid - 1);
     }
     return -1;
 }

 

 

 

    

相关文章
|
4月前
|
算法 测试技术 索引
算法-二分查找
算法-二分查找
36 0
|
1月前
|
算法
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
【算法】二分查找——在排序数组中查找元素的第一个和最后一个位置
|
1月前
|
存储 算法 Java
深入算法基础二分查找数组
文章深入学习了二分查找算法的基础,通过实战例子详细解释了算法的逻辑流程,强调了确定合法搜索边界的重要性,并提供了Java语言的代码实现。
深入算法基础二分查找数组
|
1月前
|
算法
【算法】二分查找——二分查找
【算法】二分查找——二分查找
|
2月前
|
算法
【算法】二分查找(整数二分和浮点数二分)
算法学习——二分查找(整数二分和浮点数二分)
29 0
【算法】二分查找(整数二分和浮点数二分)
|
3月前
|
存储 算法 C语言
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
二分查找算法的概念、原理、效率以及使用C语言循环和数组的简单实现
|
3月前
|
机器学习/深度学习 算法 索引
数据结构算法--1 顺序查找二分查找
**顺序查找时间复杂度为O(n)**,适合无序列表,可以通过`enumerate`或直接遍历索引来实现。**二分查找时间复杂度为O(logn)**,适用于有序列表,利用Python中`left`、`right`指针和`mid`点不断缩小搜索范围。效率上二分查找更优。
|
3月前
|
存储 算法 Java
Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。
【6月更文挑战第21天】Java查找算法概览:二分查找适用于有序数组,通过比较中间元素缩小搜索范围;哈希查找利用哈希函数快速定位,示例中使用HashMap存储键值对,支持多值关联。简单哈希表实现未涵盖冲突解决和删除操作。
36 1
|
3月前
|
算法 搜索推荐 Java
二分查找算法详解及实现
二分查找算法详解及实现
44 2
|
2月前
|
算法 JavaScript
JS 【算法】二分查找
JS 【算法】二分查找
25 0