簡體   English   中英

如何在 java 中使用鍵和值對未排序數組使用二進制搜索?

[英]How to use binary search on unsorted array with key and value in java?

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

我已經給出了添加未排序的整數數組和 integer ,我想找到它在哪個位置。我想使用 binarySearch ,它只使用排序的 arrays 所以我對數組中的數字進行排序並保存他們的第一個位置。每個幫助都會很好。預先感謝!

這是答案

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM