世上最好理解的二分查找法
二分查找(折半查找)算法是建立在有序数组基础上的。算法思想为:
1.查找过程从数组的中间元素开始,如果中间元素正好是要查找的元素,则查找过程结束;
2.如果某一待查找元素大于或者小于中间元素,则在数组大于或小于中间元素的那一半中查找,而且跟第1点一样从中间元素开始继续进行查找。
3.如果在某一步骤数组为空,则代表找不到。
接下来看例子:
int GetIndexByValue_2fen(int *array, int nvalue,int nlength)
{
int nstart = 0;
int nend = nlength;
int nmid = 0;
while (nstart<=nend)
{
nmid = (nstart + nend) / 2;
if (nvalue == array[nmid])
{
return nmid;
}else if (nvalue<array[nmid])
{
nend = nmid - 1;
}else if (nvalue>array[nmid])
{
nstart = nmid + 1;
}
}
return -1;
}
void main()
{
int a[] = { 10, 14, 17, 33, 44, 66, 88, 89, 101, 222 };
int nindex = GetIndexByValue_2fen(a, 88, 10);//第七个位置,应该输出6
cout << "位置:"<<nindex << endl;
cout << a[nindex] << endl;
system("pause");
}
结果:
解释:
其实就是拿中间位置的元素和要查找的元素比较大小,如果比要查的小,就砍掉左边部分,将起始部分在中间位置+1,结束位置不变。反之砍掉右边部分,起始位置不变,结束位置为中间位置-1.