定义一个有100个整型元素的一维数组,随机生成100个数,用二分查找一个给定的数。
思路:1.播放随机种子,随机生成100个整形数,并把这些元素放入容器v中
2.对容器的元素进行排序,因为能用二分的前提是有序的
3.利用二分查找进行查找,找到返回1,找不到返回-1.
1 #include<iostream> 2 #include <vector> 3 #include <algorithm> 4 5 using namespace std; 6 7 //用二分查找,给定一个数字,找到返回1,找不到返回-1; 8 int binarySearch(vector<int>v, int target) 9 { 10 int l = 0, r = v.size() - 1; 11 while (l <= r) //注意判别条件是l <= r,因为当l==r的时候,查找区间为最后一个元素 12 { 13 int mid = (r + l) / 2; 14 if (v[mid] == target) 15 { 16 return 1; 17 } 18 else if (v[mid] > target) 19 { 20 r = mid - 1; 21 } 22 else 23 { 24 l = mid + 1; 25 } 26 } 27 return -1; 28 } 29 30 int main() 31 { 32 vector<int>v; 33 srand(time(NULL));//播放随机种子 34 for (int i = 0; i < 100; i++) 35 { 36 int a = rand() % 100; 37 v.push_back(a); //生成的100个元素放到容器v中。 38 } 39 //二分的前提是有序 40 sort(v.begin(), v.end()); 41 for (auto x : v) 42 { 43 cout << x << " "; 44 } 45 cout << endl; 46 47 int target = 0; 48 cout << "请输入要查找的数字:" << endl; 49 while (cin >> target) 50 { 51 int res = binarySearch(v, target); 52 cout << res << endl; 53 } 54 return 0; 55 }