c++世上最好理解的二分查找法

世上最好理解的二分查找法

二分查找(折半查找)算法是建立在有序数组基础上的。算法思想为:
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.

发布了65 篇原创文章 · 获赞 6 · 访问量 1533

猜你喜欢

转载自blog.csdn.net/FairLikeSnow/article/details/103941636
今日推荐