欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

二分查表(又称:折半查表)

程序员文章站 2024-03-22 23:13:16
...

二分查找法特点:1.对有序查表进行查数,其时间复杂度(O(log2 n))大大减少;

                                          2.其算法为:每次与中间元素进行比较,如果相等,则找到,故返回该值下标; (设该查表为递增表)如果中间元素大于该数值(说明:该数在左半端; )将中间元素下标赋给右值right; 如果中间元素小于该数值,将中间元素下标赋给左值left.然后继续循环此操作,直到left = right时,结束循环,并返回 - 1

                                         
#include<stdio.h>
int binary_search(int arr1[], int x, int lenth)    //函数实现功能:折半查找数x,若找到返回下标,未找到则返回-1  
{
	int left = 0;
	int right = lenth - 1;
	int tmp = 0;
	while (left <= right)
	{
		tmp = left + (right - left) / 2;          //进行每次折半操作  
		if (x > arr1[tmp])
		{
			left = tmp + 1;
		}
		if (x<arr1[tmp])
		{
			right = tmp - 1;

		}
		if (x == arr1[tmp])
			return tmp;
	}
	return -1;

}
int main()
{

	int arr1[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	int lenth = sizeof(arr1) / sizeof(arr1[0]);             //计算数组长度  
	int x = 0;
	int ret = 0;
	printf("请输入要查找的数字:");
	scanf("%d", &x);
	ret = binary_search(arr1, x, lenth);

	if (ret != -1)
	{
		printf("找到了,其下标为:%d", ret);
	}
	else
	{
		printf("未找到");
	}

	return 0;
}