Java BinarySearch程序

时间:2016-03-19 12:32:36

标签: java arrays sorting search

我正在学习Java编程并制作了一个程序,该程序使用二进制搜索 char 数组中查找符号。但是,当我尝试在数组中搜索符号 时,我遇到了问题,我的程序变成了无休止的循环。如果数组中没有这样的符号,我不知道如何制作错误符号。这是我的程序代码

import java.lang.reflect.Array;
import java.util.Arrays;

public class Main {
    public static void main(String[] args){
        char[]arr = {'a','d','f','l','o','z'};
        find(arr,'m');

    }
    public static void find(char[]arr,char ch){
        int last = arr.length-1;
        int mid=last;
        while (arr[mid] != ch){
            if (arr[mid]<ch){
                mid = (last+mid)/2;
            }
            else{
               last=mid;
                mid=last/2;
            }
        }
        System.out.print(mid);
    }
}

提前谢谢。

3 个答案:

答案 0 :(得分:0)

如果情况不正确,则无法突破while循环以及在2期间分配给变量的更改值。另外,您还应该检查if-else梯形图中何时找到元素,并使用变量(found)来指示是否找到该元素。此外,如果你使用3个变量作为下限(第一个),中间和上限(最后一个)会更好。下面的代码是find()方法的修订版。

public static void find(char[]arr,char ch){
    int first=0,mid=0,last=arr.length-1,found=0;
    while (first<=last){
        mid=(last+first)/2;
        if(arr[mid]==ch){
            System.out.print(ch+" found at index "+mid);
            found=1;
            break;
        }
        else if(arr[mid]<ch){
            first=mid+1;
        }
        else if(arr[mid]>ch){
           last=mid-1;
        }
    }
    if(found==0)
    System.out.print(ch+" was not found ");
}

这很好用,也许你应该使用这种方法。

答案 1 :(得分:0)

您必须在find()方法中进行一些更改。首先检查mid的值是否永远不会超过last的值,因此您必须更改while循环条件因此。其次,你必须给出一个终止条件if(arr[mid]==ch)来循环。 这也可以通过使用两个变量lo&amp; hi,易于理解&amp;实现。请参阅此处的实施Binary Search

以下解决方案仅使用last&amp; mid个变量,根据您的上述代码要求:

public static void find(char[]arr,char ch){
        int last = arr.length-1;
        int mid=last/2;
        while (mid<=last){
            if(arr[mid] == ch) //if found, Print and exit the loop
            {
                System.out.println("found at:"+mid);
                return;
            }

            if (arr[mid]<ch){
                mid=((last+mid)/2)+1;
            }
            else{
                last=mid-1;
                mid=last/2;
            }
        }
        System.out.println("Not found!!");
    }

答案 2 :(得分:-2)

要在char数组中查找符号,您可以使用binarySearch类的Arrays方法。

语法:

Arrays.binarySearch(a, key);

例如:

char[] arr = {'a','d','f','l','o','z'};

如果你想搜索一个不在数组中的字符或符号,输出将是-1,就像这样,

System.out.println("The char 'b' is at index : " + Arrays.binarySearch(arr, 'b') + ".");

输出将是:

The char 'b' is at location : -1.

了解更多参考&gt;&gt; binary search algorithm