简单的使用二分查找法(有序数组)

在主函数中实现二分查找法

#include
#include
int main()
{
  int arr[] = {1,2,3,4,5,6,7,8,9,10};
  int k = 7;
  int left = 0;
  int right = sizeof(arr)/sizeof(arr[0])-1;
while(left<=right)
{
  int mid = left+(right-left)/2;
  if(arr[mid]k)
  {
  right = mid - 1;
  }
  else
  {
  printf("找到了,下标是%d",mid);
  break;
  }
}
if(left>right)
{
printf("找不到");
}
system("pause");
return 0;
}

使用函数来解决问题

#include
#include
//数组在传参时传的是数组的首地址,而地址是32个比特位,4个字节大小;
int binary_search(int arr[], int k, int sz)
{
	int left = 0;
	int right = sz - 1;
	int mid = 0;
	while (left <= right)
	{
		mid = left + (right - left) / 2;
		if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else if (arr[mid]>k)
		{
			right = mid - 1;
		}
		else
		{
			return mid;
		}
	}
	return -1;
}
int main()
{
	int k = 7;
	int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int sz = sizeof(arr) / sizeof(arr[0]);
	int ret = binary_search(arr, k, sz);
	if (ret == -1)
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了,下标是%d\n", ret);
	}
	system("pause");
	return 0;
}

今天就学习了这么多,虽然还有更多的方法去解决这个问题,但目前的知识储备还是远远所不能及的,并且这个只能用于求解有序数组的下标,对于无序数组是无法求解的。后续我会把无序数组的二分查找法学会,写出来的。

你可能感兴趣的:(简单的使用二分查找法(有序数组))