二分法查找数字--算法分析和源码

来源:互联网 发布:淘宝网如何开店铺步骤 编辑:程序博客网 时间:2024/05/16 07:23

采用二分法查找数字是用的比较多的一种方法

其算法思想可以这样理解:

比如有一行数:1 6 9 10 15 

要找到其中某一个数的位置,最简单的一种算法是穷举法,顾名思义,就是遍历这一行所有的数,比较,最后找到这个数,然后输出位置,如果到最后还是没有,就打印说没有找到该数

这里涉及到一个概念,就是算法时间复杂度(好像是这样称呼的)

穷举算法的复杂度是和n成一次函数的,所以复杂度是n,这样没有什么不好,但是该算法占用的时间比较长,所以效率比较低,程序的灵活性差

那么怎么办?--该问题即转化为如何避免过长的n呢?

可以用二分法的思想,注意:二分法只能用于序列有序的一列数

要查找的数每次和中间的这个数比较,如果是大于middle,则说明该数在后半段,如果小于,说明该数在前半段,这样就把穷举数列缩短了一半,同理在下一个数列中以此类推,都是一半一半进行比较比较,这样总是1/2,有n个1/2,所以时间复杂度是log2n,时间复杂度远远小于穷举算法

下面是部分代码:

int func(int a[],int n,int i,int j)
{
int mid=0;
mid=(int)((i+j)/2);
if(i<j)
{
if(a[mid] == n)
{
return mid+1;

if(a[mid]>n)
{
func(a,n,i,(mid-1));
}
else
{
func(a,n,(mid+1),j); 
}
}
else
{
return 0;
}
//return (j+1);
/*if(i>j)
{
printf("no such number!\n");
return 0;
}*/
}


0 0
原创粉丝点击