Как использовать бинарный поиск по несортированному массиву с ключом и значением в java? - PullRequest
0 голосов
/ 07 апреля 2020
import java.util.HashMap;
import java.util.Map;

public class BinarySearchUnsorted {

    int binary(Map<Integer, Integer> map, int start, int end, int x) {
        if (end >= start) {
            int test=start+(end-start);
            int mid = test / 2;
            System.out.println(mid);
            System.out.println(map.get(mid));
            if (map.get(mid) == x) {
                return map.get(mid);
            }
            if (map.get(mid) > x) {
                return binary(map, start, mid - 1, x);
            }
            return binary(map, mid + 1, end, x);
        }

        return -1;
    }

    public static void main(String[] args) {
        int x = 3;
        int[] arr = { 2, 4, 3, 8 };
        int length = arr.length;

        HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();

        for (int i = 0; i < length; i++) {
            map.put(arr[i],i );

        }
        BinarySearchUnsorted ob = new BinarySearchUnsorted();
        int result = ob.binary(map, 0, length - 1, x);
        if (result == -1) {
            System.out.println("Element not present");
        }
        else {
            System.out.println("Element found at index " + result);
        }
    }
}

Я дал массив целых чисел, добавленных несортированным и целым числом, которое я хочу выяснить, для какой это возможности. Я хочу использовать binarySearch, который использует только отсортированные массивы, поэтому я сортирую числа из массива и сохраняю их первую возможность. Любая помощь будет хорошей. Спасибо за это!

1 Ответ

0 голосов
/ 08 апреля 2020

Вот ответ

public static class MyEntry {
        int key;
        int value;

        public MyEntry(Integer k, Integer v) {
            key = k;
            value = v;
        }

        public String toString() {
            return ("(" + key + "," + value + ") ");
        }
    }

    public static int BinSearch(MyEntry[] arr,int low, int high, int k) {
        int  mid;


        mid = (high + low) / 2;

        if (high >= low) {

            if (arr[mid].key == k) {
                return (mid);
            }
            if (arr[mid].key > k) {
                return BinSearch(arr, low, mid - 1, k);
            }
            return BinSearch(arr, mid + 1, high, k);
        }

        return -1;
    }


    public static void main(String[] args) {
        int[] arr = { 2, 4, 3, 8 };
        int len = arr.length;
        System.out.println(len + "dulj");
        MyEntry[] entry = new MyEntry[len];

        for (int i = 0; i < len; i++) {
            entry[i] = new MyEntry(arr[i], i);
        }

        for (int i = 0; i < entry.length; i++)
            System.out.print(i + ":" + entry[i]);
        System.out.println();

        int result = BinSearch(entry,0, len-1, 8);
        System.out.println(result);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...