使用Java进行排序和二进制搜索

我被要求排序和搜索数组。 排序数组很简单,我的代码工作,但每当我尝试调用二进制搜索方法时,它适用于数组中的第一个元素,但作为结果给我“-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  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  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; } 

你搞砸了二进制搜索间隔

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

您在以下行中调用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); } 

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

对于排序: Collections#sort

对于搜索: Collections#binarySearch

看到这个

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

    二进制搜索的结果