Java BinarySearch

前端 未结 10 2156
忘了有多久
忘了有多久 2020-12-09 23:33

Can I get some help please? I have tried many methods to get this to work i got the array sorted and to print but after that my binary search function doesnt want to run and

10条回答
  •  半阙折子戏
    2020-12-09 23:40

    Here is a solution without heap. The same thing can be done in an array. If we need to find 'k' largest numbers, we take an array of size 'k' populated with first k items from the main data source. Now, keep on reading an item, and place it in the result array, if it has a place.

    public static void largestkNumbers() {
        int k = 4;    // find 4 largest numbers
        int[] arr = {4,90,7,10,-5,34,98,1,2};
        int[] result = new int[k];
    
        //initial formation of elems
        for (int i = 0; i < k; ++i) {
          result[i] = arr[i];
        }
        Arrays.sort(result);
    
        for ( int i = k; i < arr.length; ++i ) {
          int index = binarySearch(result, arr[i]);
          if (index > 0) {
            // insert arr[i] at result[index] and remove result[0]
            insertInBetweenArray(result, index, arr[i]);
          }
        }
      }
    
      public static void insertInBetweenArray(int[] arr, int index, int num) {
        // insert num at arr[index] and remove arr[0]
        for ( int i = 0 ; i < index; ++i ) {
          arr[i] = arr[i+1];
        }
        arr[index-1] = num;
      }
    
      public static int binarySearch(int[] arr, int num) {
    
        int lo = 0;
        int hi = arr.length - 1;
        int mid = -1;
    
        while( lo <= hi ) {
          mid = (lo+hi)/2;
          if ( arr[mid] > num ) {
            hi = mid-1;
          } else if ( arr[mid] < num ) {
            lo = mid+1;
          } else {
            return mid;
          }
        }
        return mid;
      }
    

提交回复
热议问题