展开全部
这个是我刚写,在给62616964757a686964616fe59b9ee7ad9431333363383463出代码之前,我先声明一下,至于你说的时间复杂度对我来说,是天书,我不懂
我只知道用循环的时候,谁用的次数少,能找出东西,谁就快!
这个是百度到的你所问的折半复杂度:O(log2n),倘若你真是大神着迷这个,你不妨看看算法导论!
对于目前我来说,我就只认一个理,谁快而且能找的准谁就好用!
下面我用折半查找,和普通查找同时查找一个数字的时候用的次数对比,一目了然!
说实话,我也是初学者,而且对于数组这块,排序,我甚是着迷,感觉这些原创大脑真的厉害...非常佩服!
闲话少说,上代码:声明下这个我个人原创for二分查找呵呵:public class BinarySearch
{
public static void main(String[] args)
{
System.out.println("\n\t\t==========折半查找算法==========\n");
int[] arr={11,25,36,44,46,51,60,61,62,63,75,79,88};
System.out.println("目标索引位置:"+init(arr,62)+"\n");
System.out.println("目标索引位置:"+init1(arr,62)+"\n");
}
//折半查找!
private static int init(int[] arr,int a)
{
int tem=-1,n=0;
for (int t=0,w=arr.length-1,z=(w+t)/2;t<=w;)
{
n++;
if(a>arr[z])
t=z+1;
else if(a
w=z-1;
else if (a==arr[z])
{
tem=z;
break;
}
else
break;
z=(w+t)/2;
}
System.out.println("二分查找耗时n="+n+"次");
return tem;
}
//普通查找!
private static int init1(int[] arr,int a)
{
int tem=-1,n=0;
for (int i=0;i
{
n++;
if (a==arr[i])
{
tem=i;
break;
}
}
System.out.println("普通查找耗时n="+n+"次");
return tem;
}
}
这里有个博客专门对算法解析:还算比较通俗易懂的,你可以参考看看: