算法之二分查找

首先說一下二分查找的條件:必須是有序的一組數據。
好了直接開始!
在這裏插入圖片描述

int BinarySearch(int* arr, int len, int key)
{
	if (NULL == arr || len < 0)
		return -1;
	if (key < arr[0] || key >arr[len - 1])
		return -1;

	int left = 0;
	int right = len - 1;
	while (left <= right)
	{
		int mid = (right - left) / 2 + left;

		if (key == arr[mid])
			return mid;

		else if (key > arr[mid])
		{
			left = mid + 1;
		}
		else
		{
			right = mid - 1;
		}		
	}
	return -1;	
}

測試用例:

int main()
{
	int arr[] = { 1, 2, 3, 5, 6, 7, 8, 9};
	int len = sizeof(arr) / sizeof(arr[0]);
	for (int i = 0; i < len ; i++)
	{
		printf("%d ",arr[i]);
	}
	printf("\n");
	int key1 = 0;
	int key2 = 1;
	int key3 = 9;
	int key4 = 4;
	int key5 = 5;
	int test1 = BinarySearch(arr, len, key1);
	int test2 = BinarySearch(arr, len, key2);
	int test3 = BinarySearch(arr, len, key3);
	int test4 = BinarySearch(arr, len, key4);
	int test5 = BinarySearch(arr, len, key5);
	printf("%d\n",test1);
	printf("%d\n", test2);
	printf("%d\n", test3);
	printf("%d\n", test4);
	printf("%d\n", test5);
	return 0;
}

在這裏插入圖片描述

發佈了52 篇原創文章 · 獲贊 103 · 訪問量 4100
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章