提高循环的效率:折半查找算法

来源:互联网 发布:linux 开发Android 编辑:程序博客网 时间:2024/06/06 12:26

通过最近的看书学习,获益匪浅。

下面介绍一种折半查找算法:

比如我买了一双鞋,你好奇问我多少钱,我说不超过300,然后让你猜,那么你一定每次猜中间数。

举个例子,若实现在主函数内,一有序数组{1,2,3,4,5,6,7,8,9,10}中寻找7在哪

那么就不用一一查找,直接用这种算法,最多只计算4次

#include <stdio.h>


int main()
{
int arr[10] = {1,2,3,4,5,6,7,8,9,10};
int left = 0; //定义左值
int right = sizeof(arr)/sizeof(arr[0])-1; //定义右值
int i = 0;
int key = 7;
int mid = 0; //定义中间值
while(left<=right)
{
mid = left+(right-left)/2;
if(arr[mid]>key)
{
right = mid-1;
}
else if(arr[mid]<key)
{
left = mid+1;
}
else
{
break;
}
}  
if(left <= right)
printf("%d",mid);
else
printf("no");

return 0;
}

;另外,再介绍一种比较好的求平均值的办法,比如当球两个整形a和b的平均值,若a+b大于最大值,那么程序一定出错。


如果用大的数减去小的数的一半给小的数,那么就是平均值,这样做不会超过最大值,所以程序不会出错。

具体:两个整形a和b(a<b)

求平均值x:x=a+(b-a)/2



     

原创粉丝点击