TEL:400-8793-956
当前位置:程序、服务器

有人可以解释这个Java程序的算法吗?

提问者: 近期获赞: 浏览人数: 发布时间:2020-12-30 13:05:02

 问:我在网上找到了它,我想知道它的算法解释。我很难理解这一点。非常感谢 :)

 
import java.util.Scanner;
class BinarySearch 
{
public static void main(String args[])
{
int c, first, last, middle, n, search, array[];
Scanner in = new Scanner(System.in);
System.out.println("Enter number of elements");
n = in.nextInt(); 
array = new int[n];
System.out.println("Enter " + n + " integers");
for (c = 0; c < n; c++)
  array[c] = in.nextInt();
System.out.println("Enter value to find");
search = in.nextInt();
first  = 0;
last   = n - 1;
middle = (first + last)/2;
while( first <= last )
{
  if ( array[middle] < search )
    first = middle + 1;    
  else if ( array[middle] == search ) 
  {
    System.out.println(search + " found at location " + (middle + 1) + ".");
    break;
  }
  else
     last = middle - 1;
  middle = (first + last)/2;
 }
 if ( first > last )
  System.out.println(search + " is not present in the list.\n");
  }
 }
 
 
答:您提供的程序对给定的元素执行二进制搜索。
 
二元搜寻
 
这是复杂度为(log n)的搜索算法之一,它基于分而治之的原理。数据应采用排序形式,以便该算法起作用。
 
它首先搜索中间元素。如果找到了所需的元素,则它将返回该元素。如果中间元素大于该元素,则在左侧子阵列上执行搜索,否则在右侧子阵列上执行搜索。
 
这个怎么运作?
 
第一个条件是数组应采用排序形式。我们将借助示例进行查看,在该示例中我们将在给定数组中搜索17。
 
3 6 8 9 11 12 14 17 20 65
 
1)我们使用以下公式计算数组的中间值:
 
middle =(low + high)/ 2
low =数组的下标,在此为0。
high =数组的较高索引,即9。
这里是(0 + 9)/ 2 = 4(int值为4.5)。
所以4是这里的中间索引值
 
3 6 8 9 11 12 14 17 20 65
 
第4个索引的值为11。
 
现在,我们将11与所搜索的值进行比较。即17。这两个值不匹配。现在我们将比较它们,因为11 <17,这意味着如果正确的子数组将找到我们的值
 
为此,我们将低端更改为中+1,然后再次重复相同的操作。
 
低=中+ 1中=(低+高)/ 2这是新的数组。
 
3 6 8 9 11
 
12 14 17 20 65
 
中间=(5 + 9)/ 2 =第七名。我们现在的新年龄是17岁。
 
现在,我们将再次比较需要搜索的值和该值。由于值匹配,我们将返回元素的位置。
 
即Middle + 1,即(7 + 1)= 8。
 
因此它将返回“在第8个位置找到元素”。
 
如果仍然找不到它,那么我们将继续重复同一件事,直到找到我们的值为止;如果找不到,我们将为此返回适当的消息。
 
这种搜索技术比线性搜索更好,因为它减少了在数组中查找给定项所需进行的比较的次数。
 
上一篇: 更新密码
下一篇: 在iPhone中同时访问麦克风