采用二分法的条件:
1、数据量很大的时候
2、数据需要排好序
3、需要找到某个值的索引
二分,顾名思义就是折半,假设一个数组的长度为10,对于给定的值value,与位于序列中间的值mid开始比较,如果value小于mid,就在0到mid-1的索引之间继续判断中间值是否等于value。如果value大于mid,就在mid+1到9的索引之间判断中间值是否等于value。如果mid等于value,说明查找完成,返回mid的索引。
#include <iostream>
using namespace std;
//二分法查找
int findNode(int (&a)[10],int i)
{
int middle = 0;
int n = sizeof(a) / sizeof(int);
int start = 0;
int end = n - 1;
while (start<=end)
{
middle = (start + end) / 2; //取中间索引
if (i > a[middle])
{
start = middle+1;
}
else if (i < a[middle])
{
end = middle-1;
}
else if (i == a[middle])
return middle;
}
return -1;
}
int main()
{
/*创建一个已经排好序的数组
若创建未排序数组,可以通过排序算法将数组排序。
*/
int array[10] = { 1, 6, 8, 12, 14, 16, 17, 28, 39 ,100};
int ret = 0;
//传递的是引用
ret=findNode(array, 6);
if(ret == -1)
{
cout << "序列中没有这个元素!"<< endl;
}
else
{
//输出
cout << "被查元素的索引是:" << ret << endl;
}
return 0;
}