二分查找中求中值时要注意溢出

// BinarySearch.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
int a[100]={0};

int BinarySearch(int left, int right, int num)
{
	if (left <= right)
	{
		int mid = left + (right - left)/2;
	
		if (num == a[mid])
			return num;

		if (num > a[mid])
			left = mid + 1;
		else
			right = mid - 1;

		return BinarySearch(left, right, num);
		
	}
	
	return -1;
}

int BinarySearch2(int left, int right, int num)
{
	while(left <= right)
	{
		//int mid = (left + right)/2; //容易溢出
		int mid = left + (right - left)/2;
		if (num == a[mid])
			return num;

		if (num > a[mid])
			left = mid + 1;
		else
			right = mid - 1;
		
	}
	
	return -1;
}
int main(int argc, char* argv[])
{
	//建立一个有序数组
	int i;
	for (i = 0; i < 100; i++)
		a[i]=i;

	int pos = BinarySearch2(0, 99, 25);
	return 0;
}
int mid = (left + right)/2; //在两个数很大的时候容易溢出

你可能感兴趣的:(二分查找中求中值时要注意溢出)