概述
介绍使用二分法查找在数组 array 内寻找目标值 val 需要满足的条件:1.数组有序;2.数组元素不重复。查找过程很容易理解,定义好左右边界后(left,right),将数组中间值和目标值做比较,因为数组是有序的(升序)若中间值大于目标值则表示目标值一定位于中间值的右侧,因此要缩小区间,即移动右边界,将中间值的索引赋值给right,这样就不用再对右边的数组元素进行遍历。以此类推。下面给出了测试代码,包含暴力查找和二分法查找。
/*
*给定一个一维数组,和目标值,遍历该数组中;
* 找到目标值,返回目标值的数组索引;
* 未找到,返回-1;
*/
#include<iostream>
#include<ctime>
#include<vector>
using namespace std;
//暴力查找
int Search(vector<int>& nums, int val)
{
int index = INT32_MAX;
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] == val) {
index = i;
}
}
return index == INT32_MAX ? -1 : index;
}
//二分法查找
int Bsearch(vector<int>& nums, int val)
{
int left = 0;
int right = nums.size() - 1;
while (left <= right)
{
int middle = (right + left) / 2;
if (nums[middle] > val)
{
right = middle - 1;
}
else if (nums[middle] < val)
{
left = middle + 1;
}
else {
return middle;
}
}
return -1;
}
void Search_test()
{
cout << "暴力查找" << endl;
vector<int> nums = { 1,3,5,7,9,11,13 };
long start = clock();
int index = Search(nums, 11);
cout << "目标值的下标是:" << index << endl;
cout << "耗费时间:" << clock()-start << endl;
}
void Bsearch_test()
{
cout << "二分查找" << endl;
vector<int> nums = { 1,3,5,7,9,11,13 };
long start = clock();
int index = Search(nums, 11);
cout << "目标值的下标是:" << index << endl;
cout << "耗费时间:" << clock() - start << endl;
}
int main()
{
Search_test();
Bsearch_test();
return 0;
}
以下是运行结果,结果显示在满足二分法条件的数组查找情况下,二分法的查找效率要比暴力解法高。
最后
以上就是鲜艳奇迹为你收集整理的C++ 查找数组元素的全部内容,希望文章能够帮你解决C++ 查找数组元素所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复