C++ 中的二分查找

c++programmingserver side programming

二分查找是一种通过反复将数组减半并在其中一半进行搜索来查找已排序数组中所需元素的方法。

此方法从整个数组开始。然后将其减半。如果所需数据值大于数组中间的元素,则考虑数组的上半部分。否则,考虑下半部分。此过程不断进行,直到获得所需数据值或剩余数组为空。

下面给出了一个演示 C++ 中二分查找的程序。

示例

#include
using namespace std;
int binarySearch(int arr[], int p, int r, int num) {
   if (p <= r) {
      int mid = (p + r)/2;
      if (arr[mid] == num)
         return mid ;
      if (arr[mid] > num)
         return binarySearch(arr, p, mid-1, num);
      if (arr[mid] < num)
         return binarySearch(arr, mid+1, r, num);
   }
   return -1;
}
int main(void) {
   int arr[] = {1, 3, 7, 15, 18, 20, 25, 33, 36, 40};
   int n = sizeof(arr)/ sizeof(arr[0]);
   int num;
   cout << "输入要搜索的数字:\n";
   cin >> num;
   int index = binarySearch (arr, 0, n-1, num);
   if(index == -1){
      cout<< num <<" 不存在于数组中";
   }else{
      cout<< num <<" 存在于数组中的索引<<< 索引 <<" 处;
   }
   return 0;
}

输出

输入要搜索的数字
20
20 存在于数组中的索引 5 处

在上面的程序中,binarySearch() 是一个递归函数,用于使用二分搜索在数组中查找所需元素。该函数以数组、其下限和上限以及要查找的数字作为参数。如下所示。

int binarySearch(int arr[], int p, int r, int num)

然后计算数组的中点。如果中点的值等于 num,则返回该值。如果值大于 num,则数组使用下限 p 和上限 mid-1 递归调用自身。如果值小于 num,则数组使用下限 mid+1 和上限 r 递归调用自身。这可以通过以下代码片段看到。

int binarySearch(int arr[], int p, int r, int num) {
   if (p <= r) {
      int mid = (p + r)/2;
      if (arr[mid] == num)
         return mid ;
      if (arr[mid] > num)
         return binarySearch(arr, p, mid-1, num);
      if (arr[mid] < num)
         return binarySearch(arr, mid+1, r, num);
   }
   return -1;
}

在 main() 函数中,定义了数组 arr[]。计算数组的大小并指定要查找的数字。然后调用 binarySearch() 来查找数字的索引。如果 binarySearch() 返回的值为 -1,则该数字不在数组中。否则,返回索引值。如下所示。

int main(void) {
   int arr[] = {1, 3, 7, 15, 18, 20, 25, 33, 36, 40};
   int n = sizeof(arr)/ sizeof(arr[0]);
   int num = 33;
   int index = binarySearch (arr, 0, n-1, num);
   if(index == -1)
      cout<< num <<" 不存在于数组中";
   else
      cout<< num <<" 存在于数组中的索引<<< index <<" 处";
   return 0;
}

相关文章