📜  二进制搜索的C程序(递归和迭代)

📅  最后修改于: 2021-05-04 23:34:51             🧑  作者: Mango

一次比较之后,我们基本上忽略了一半的元素。

  1. 将x与中间元素进行比较。
  2. 如果x与中间元素匹配,则返回中间索引。
  3. 否则,如果x大于mid元素,则x只能位于mid元素之后的右半子数组中。因此,我们重复右半部分。
  4. 否则(x较小)重复出现在左半部分。

递归的:

C/C++
#include 
  
// A recursive binary search function. It returns location of x in
// given array arr[l..r] is present, otherwise -1
int binarySearch(int arr[], int l, int r, int x)
{
   if (r >= l)
   {
        int mid = l + (r - l)/2;
  
        // If the element is present at the middle itself
        if (arr[mid] == x)  return mid;
  
        // If element is smaller than mid, then it can only be present
        // in left subarray
        if (arr[mid] > x) return binarySearch(arr, l, mid-1, x);
  
        // Else the element can only be present in right subarray
        return binarySearch(arr, mid+1, r, x);
   }
  
   // We reach here when element is not present in array
   return -1;
}
  
int main(void)
{
   int arr[] = {2, 3, 4, 10, 40};
   int n = sizeof(arr)/ sizeof(arr[0]);
   int x = 10;
   int result = binarySearch(arr, 0, n-1, x);
   (result == -1)? printf("Element is not present in array")
                 : printf("Element is present at index %d", result);
   return 0;
}
Iterative


C/C++
#include 
  
// A iterative binary search function. It returns location of x in
// given array arr[l..r] if present, otherwise -1
int binarySearch(int arr[], int l, int r, int x)
{
  while (l <= r)
  {
    int m = l + (r-l)/2;
  
    // Check if x is present at mid
    if (arr[m] == x) 
        return m;  
  
    // If x greater, ignore left half  
    if (arr[m] < x) 
        l = m + 1; 
  
    // If x is smaller, ignore right half 
    else 
         r = m - 1; 
  }
  
  // if we reach here, then element was not present
  return -1; 
}
  
int main(void)
{
   int arr[] = {2, 3, 4, 10, 40};
   int n = sizeof(arr)/ sizeof(arr[0]);
   int x = 10;
   int result = binarySearch(arr, 0, n-1, x);
   (result == -1)? printf("Element is not present in array")
                 : printf("Element is present at index %d", result);
   return 0;
}
Please refer complete article on Binary Search for more details!Want to learn from the best curated videos and practice problems, check out the C Foundation Course for Basic to Advanced C.