二分法原理及代码实现

如果这篇文章对你有所帮助或者给了你灵感,欢迎给我点个小红心,如果没有,也可以点个赞支持一下,谢谢大家!!!

二分法

基本思想:

假设数据是按升序排序的,对于给定值key,从序列的中间位置 k 开始比较,
如果当前位置arr[k]值等于key,则查找成功;
若key小于当前位置值arr[k],则在数列的前半段中查找,arr[low,mid-1];
若key大于当前位置值arr[k],则在数列的后半段中继续查找arr[mid+1,high]。

时间复杂度:

1.最坏情况查找最后一个元素(或者第一个元素)Master定理T(n)=T(n/2)+O(1)所以T(n)=O(log2n)
2.最好情况查找中间元素O(1)查找的元素即为中间元素(奇数长度数列的正中间,偶数长度数列的中间靠左的元素)

下面给出具体代码:

#include<stdio.h>
#include<string>
int main()
{
    
    
	int a[] = {
    
     1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
	int x;
	printf("请输入你要查找的数字:\n");
	scanf("%d", &x);
	int right = sizeof(a) / sizeof(a[0]) - 1;
	int left = 0;
	while (left <= right){
    
    
		int mid = (left + right) / 2;
		if (x > a[mid]){
    
    
			left = mid + 1;
		}
		else if (x < a[mid]){
    
    
			right = mid - 1;
		}
		else{
    
    
			printf("找到了,下标是:%d\n", mid);
			break;
		}
	}
	if (left>right)
		printf("找不到\n");

}

下图为运行结果:
在这里插入图片描述
都看到这了,就点个赞支持一下呗!

猜你喜欢

转载自blog.csdn.net/m0_52771278/article/details/110674632
今日推荐