1. 程式人生 > >C語言:遞迴和非遞迴實現二分查詢

C語言:遞迴和非遞迴實現二分查詢

二分查詢是將有序數列不斷地縮小,直到找到改元素或折半區域的首元素位置高於尾元素位置為止。
//遞迴寫二分查詢
int BinarySearchD(int arr[], int x, int begin, int end)
{
	if (begin <= end)
	{
		int mid = begin + ((end - begin) >> 1);
		if (arr[mid] == x)
		{
			return mid;
		}
		else if (arr[mid] < x)
		{
			return BinarySearchD(arr, x, mid + 1, end);
		}
		else if (arr[mid] > x)
		{
			return BinarySearchD(arr, x, begin, mid - 1);
		}
		else
		{
			return -1;
		}
	}
}
//非遞迴二分查詢
int BinarySearch(int arr[], int x,int begin,int end)
{
	while (begin <= end)
	{
		int mid = begin + ((end - begin) >> 1);
		if (arr[mid] == x)
		{
			return mid;
		}
		else if (arr[mid] < x)
		{
			begin = mid + 1;
		}
		else if (arr[mid]>x)
		{
			end = mid - 1;
		}
		else
		{
			return mid + 1; 
		}
	}
	return 1;
}
int main()
{
	int array[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int len = sizeof(array) / sizeof(array[0]);
	int begin = 0;
	int end = len;
	printf("%d ", BinarySearch(array, 8, begin, end));
	printf("%d ", BinarySearchD(array, 8, begin, end));

	system("pause");
	return 0;
}