【问题标题】:Sorting and Binary search using Java使用 Java 进行排序和二进制搜索
【发布时间】:2013-10-29 19:40:58
【问题描述】:

我被要求对一个数组进行排序和搜索。数组的排序很简单,我的代码可以工作,但是每当我尝试调用二进制搜索方法时,它都适用于数组中的第一个元素,但结果是“-1”

我的完整代码如下:

 public static void main(String[] args) {

    int[] array = new int[5];
    array[0] = 50;
    array[1] = 40;
    array[2] = 10;
    array[3] = 20;
    array[4] = 100;

sort(array, (array.length - 1));

      for (int x = 0; x < array.length; x++) {
        System.out.println(" " + array[x]);
    }
    System.out.println("");
    System.out.println("Binary search (R): " + rBsearch(array, 0, (array.length), 20));
}
    public static void sort(int[] a, int last) {
    if (last > 0) {
        int max = findMax(a, last);
        swap(a, last, max);
        sort(a, last - 1);
    }
}

public static int rBsearch(int[] L, int low, int high, int k) {


    int mid = (low + high) / 2;

    if (low > high) {
        return -1;
    } else if (L[mid] == k) {
        return mid;
    } else if (L[mid] < k) {
        return rBsearch(L, k, mid + 1, high);
    } else {
        return rBsearch(L, k, low, mid - 1);
    }
 }

public static int findMax(int[] arr, int last) {

    int max = 0;
    for (int i = 0; i <= last; i++) {
        if (arr[i] > arr[max]) {
            max = i;
        }
    }
    return max;
    }

public static void swap(int[] arr, int last, int max) {
    int temp = arr[last];
    arr[last] = arr[max];
    arr[max] = temp;
}

【问题讨论】:

  • 看看你的 rBsearch 方法 - 看起来你混淆了边界并键入递归调用。也许添加println 以查看实际发生的情况。

标签: java arrays sorting search recursion


【解决方案1】:

最简单的方法是: 将您的数组转换为列表:Arrays.asList(array)

用于排序:Collections#sort

搜索:Collections#binarySearch

this

【讨论】:

    【解决方案2】:

    您在以下行中调用 rBsearch 方法时犯了一个错误 而不是

    else if (L[mid] < k) {
            return rBsearch(L, k, mid + 1, high); 
        } else {
            return rBsearch(L, k, low, mid - 1);
        }
    

    你应该使用

    else if (L[mid] < k) {
                return rBsearch(L,  mid + 1, high,k); //the order of the parameters
            } else {
                return rBsearch(L, low, mid - 1,k);
            }
    

    【讨论】:

      【解决方案3】:

      你搞砸了二分搜索间隔

      public static int rBsearch(int[] L, int low, int high, int k) {
      
      
          int mid = (low + high) / 2;
      
          if (low > high) {
              return -1;
          } else if (L[mid] == k) {
              return L[mid];
          } else if (L[mid] < k) {
              return rBsearch(L, mid + 1, high, k);
          } else {
              return rBsearch(L, low, mid - 1, k);
          }
       }
      

      【讨论】:

      • 我在做这个的时候有很多想法!总之谢谢!
      【解决方案4】:
      1. 从用户获取数组
      2. 使用 Java 的内置函数对数组进行排序...
      3. 然后使用二分搜索搜索元素......

            import java.lang.reflect.Array;
            import java.util.Arrays;
            import java.util.Scanner;
        
            class BinarySearch
            {
               public static void main(String args[])
               {
                  int array[];
        
                  Scanner input = new Scanner(System.in);
                  System.out.println("Enter number of elements:");
                 int Size_Of_Array = input.nextInt(); 
        
        
                  array = new int[Size_Of_Array];
        
                  System.out.println("Enter " + Size_Of_Array + " integers");
        
                  for (int counter = 0; counter < Size_Of_Array; counter++)
                      array[counter] = input.nextInt();
        
                  Arrays.sort(array);
                  System.out.println("Sorting Array is :-");
                  for (int counter = 0; counter < Size_Of_Array; counter++)
                      System.out.println(array[counter]);
        
                  System.out.println("Enter the search value:");
                  int  Searching_item = input.nextInt();
        
                  int First_Index=0;
                  int Last_Index=Size_Of_Array-1;
                  int Middle_Index=(First_Index+Last_Index)/2;
        
                  while(First_Index <= Last_Index)
                  {
                      if(array[Middle_Index] < Searching_item)
                      {
                          First_Index=Middle_Index+1;
                      }
                      else if ( array[Middle_Index] == Searching_item ) 
                      {
                        System.out.println(Searching_item + " found at location " + (Middle_Index + 1) + ".");
                        break;
                      }
                      else
                      {
                          Last_Index = Middle_Index - 1;
                      }
                      Middle_Index = (First_Index + Last_Index)/2;
        
                      if ( First_Index > Last_Index )
                      {
                          System.out.println(Searching_item + " is not found.\n");
                      }
                  }
                }
            }
        

        Result of BinarySearch

      【讨论】:

        猜你喜欢
        • 2013-06-01
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-03-26
        相关资源
        最近更新 更多