有人能解释一下这个java程序的算法吗?

时间:2016-03-08 10:52:30

标签: java algorithm binary-search

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

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");
  }
 }

我很感激您的回复。再次感谢。

1 个答案:

答案 0 :(得分:-1)

二进制搜索算法首先将目标值与已排序数组的中间元素的值进行比较。如果目标值等于中间元素的值,则返回位置并完成搜索。如果目标值小于中间元素的值,则搜索继续在数组的下半部分;或者如果目标值大于中间元素的值,则搜索继续在数组的上半部分。这个过程继续,消除了一半的元素,并将目标值与剩余元素的中间元素的值进行比较 - 直到找到目标值(并返回其关联的元素位置),或者直到整个数组都有被搜查(并且“未找到”被返回)。

这是你的答案精美解释:

检查一下 http://www.csit.parkland.edu/~mbrandyberry/CS1Java/Lessons/Lesson27/BinarySearch.htm