二分查找与循环查找的比较
程序员文章站
2022-03-01 18:43:08
...
循环查找,顾名思义,就是通过一遍遍的循环去查找对应的数,这样很费时,而且每循环一次要比较一次。
代码:
for(int i = 0;i<a.length;i++) {
if(SearchNumber == a[i]) {
System.out.println("找到了你输入的数字:");
long end = System.currentTimeMillis();
System.out.println("循环查找用时:"+(end-start)+"ms");
System.exit(0);
}
}
二分查找的意思是设定一个low值初始时对应数组的第一个元素的下标,high对应的是数组最后一个元素的下标,我们取中间值mid= (high+low)/2,每次拿需要找的数字与mid比较,如果小于mid,那么说明查找的数字是在low到mid之间的,那么更新high的值为mid-1,如果大于mid,那么说明查找的数字在mid到high之间,那么更新low的值,low=mid+1,,在更新low或者high的值之后,mid的值也更新了,就这样一直在一半的区间寻找,效率会更高。
代码:
int low = 0;
int high = a.length-1;
Scanner input = new Scanner(System.in);
System.out.print("输入需要查找的数字:");
int SearchNumber = input.nextInt();
while(high>=low)
{
int mid = (low + high)/2;
if(SearchNumber<a[mid]) //查找的元素比中间值小
{
high = mid-1;
}else if(SearchNumber>a[mid]) //查找的元素比中间值大
{
low = mid + 1;
}
else //找到了
{
System.out.println("找到了输入的数字");
long end = System.currentTimeMillis();
System.out.println("二分查找用时:"+(end-start)+"ms");
System.exit(0); //找到以后终止查找
}
}
System.out.println("没找到输入的数字");
比较一下这两个算法的效率
因为我是用的是随机数,所以将结果相差不多,在我们知道的数组序列时,我们使用二分查找是比较好的。
上一篇: 几种二分查找算法的代码和比较