二进制搜索中的递归方法

时间:2015-12-11 14:26:48

标签: java recursion

我试图实现二进制算法,但我真的不知道如何使用递归方法编写此程序。有人可以帮我吗,请写这个方法? 我已经为我写了最简单的方法:

<script id="someTemplate" type="text/x-handlebars-template">
    <div class="editStuff">
        <span \{{#if aThing}} data-someKey="\{{anotherThing}}" \{{/if}}>
            \{{aThirdThing}}
        </span>
    </div>
</script>

我试过这种方法,但它没有工作

import Prog1Tools.IOTools;
public class BinarySearch {

     public static void showArray(int[] array) {
         for(int x : array) System.out.print (x + " ");
         System.out.println ();
         }

     public static void fillArray(int[] array, int arrayFirst) {
         int i = 0;     
         while (i < array.length){
             array[i] = arrayFirst;
             i++;
             arrayFirst++;
         }   
    }

     public static void main(String[] args) {

         int l, p, s;
         int arrayEnd = IOTools.readInt("Type a last number in the array : ");
         int arrayFirst = IOTools.readInt("Type a first number in the array : ");         
         int[] nums = new int[arrayEnd+1-arrayFirst ];  
         fillArray(nums, arrayFirst);
         showArray(nums);    
         System.out.println ("Could you please choose a number from the array above? " );  
         l = 0;
         p = arrayEnd-arrayFirst;
         loop: while (l <= p) {
              s = (l + p) / 2;
              String question = IOTools.readString("Is your number "+nums[s] + " or higher ?[You can answer: yes or higher] ");

                switch (question){
                case "yes":
                    System.out.println("I found a number "+nums[s]+" Your number has an index "+s +" in the array");
                    break loop;
                case "higher":
                    l = s + 1;  
                    break; 
                }               
              }
          }  
     }

2 个答案:

答案 0 :(得分:0)

public boolean binaryS(int A[],int left, int right, int x){
    int middle;
    //check if there is any array left to search
    if (left > right) return false;
    //determine the middle of this array section
    middle = (left + right) / 2;
    //is the middle what we are looking for?
    if (A[middle] == x) return true;
    //search the half of the array that might contain x
    if (A[middle] > x) { //search for x to the left
        return binaryS(A, left, middle - 1, x);
    } else { //search for x to the right
        return binaryS(A, middle + 1, right, x);
    }
}

答案 1 :(得分:0)

鲍勃的答案是一个很好的二元搜索。

如果您想要用户输入(并保留您的结构):

public static int recursiveBinarySearch(int[] sortedArray, int start, int end) {
    if (start < end) {
        int mid = (start + end) / 2;
        String question = IOTools.readString("Is your number compared to "+sortedArray[mid] + " lower or higher?[You can answer: equal, lower or higher] "); 
        if (question.equals("higher")) {
            return recursiveBinarySearch(sortedArray, mid+1, end, question);
        } else if (question.equals("lower")) {
            return recursiveBinarySearch(sortedArray, start, mid-1, question);
        } else {
            return mid;  
        }
    }
    System.out.println("Something went wrong...");
    return -1;
}