C语言实现二分查找

int binary_search(int arr[], int key,int sz) {//本质上这个形参arr接收的是一个指针;因为指针才能接收地址;
	//int sz = sizeof(arr) / sizeof(arr[0]);//指针大小在64位机上是8个字节,一个整型是4个字节,所以sz为2;这句代码之所以注释掉,因为把他放在此处,得不到它本应得到的结果.要放在main函数里.
	printf("%d\n", sz);
	int h = 0;
	int t = sz-1;
	printf("%d\n", t);

	while (h<=t)
	{
		int mid = (h+t) / 2;
		if (arr[mid]==key)
		{
			return mid;
		}
		else if (arr[mid] > key) {
			t = mid - 1;
		}
		else if (arr[mid]<key)
		{
			h = mid + 1;
		}
	}
	return -1;
}


int main() {
	int arr[] = {1,2,3,4,5,6,7,8,52,64,97,100};
	int k = 8;
	int sz = sizeof(arr) / sizeof(arr[0]);
	int res = binary_search(arr, k,sz);//通常来讲,传参传的是实参的一份拷贝;但数组作为参数传递时,由于不清楚数组到底有多大,再拷贝一份实属浪费内存空间;所以传递数组时,实际传递的是数组中首元素的地址.
	if (res!=-1) {
		printf("找到了,下标是%d", res);
	}
	else if(res==-1)
	{
		printf("不存在!");
	}
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值