基于递归的折半查找

Posted christy99cc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于递归的折半查找相关的知识,希望对你有一定的参考价值。

 

请编写一个递归的折半查找算法,查找给定有序数组中的某一元素。

多组数据,每组数据有三行。第一行为数组长度n,第二行为n个递增排列的数字,第三行为需要查找的数字k。当n=0时输入结束。

每组数据输出一行,如果可以找到数字,则输出“YES”,否则输出“NO”。

5
1 4 6 7 8
6
6
1 2 5 7 9 100
8
0
YES
NO

 1 #include<iostream>
 2 using namespace std;
 3 
 4 bool binary_search(int arr[], int low, int high, int target)
 5 {
 6     if (low > high)
 7         return false;
 8     if (low <= high)
 9     {
10         int mid = (low + high) / 2;
11         if (arr[mid] == target)
12             return true;
13         else if (mid < target)
14         {
15             binary_search(arr, mid + 1, high, target);
16         }
17         else
18         {
19             binary_search(arr, low, mid - 1, target);
20         }
21     }
22 }
23 
24 int main()
25 {
26     int *arr;
27     int n, target;
28     while (cin >> n)
29     {
30         if (n == 0) break;
31         arr = new int[n + 1];
32         for (int i = 1; i <= n; i++)
33             cin >> arr[i];
34 
35         cin >> target;
36         bool flag = binary_search(arr, 1, n, target);
37         if (flag)
38             cout << "YES" << endl;
39         else
40             cout << "NO" << endl;
41         delete[]arr;
42     }
43     return 0;
44 }

 

以上是关于基于递归的折半查找的主要内容,如果未能解决你的问题,请参考以下文章

用递归法写一个折半查找的算法

分治算法----折半查找----递归二分算法

折半查找的递归改写

折半查找的递归算法

递归与分治思想:治思想 && 折半查找法(迭代 && 递归)

折半查找