如何在Java中对未排序的带有键和值的数组使用二进制搜索?

huangapple 未分类评论45阅读模式
英文:

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);
        }
    }
}
英文:
import java.util.HashMap;
import java.util.Map;

public class BinarySearchUnsorted {

	int binary(Map&lt;Integer, Integer&gt; map, int start, int end, int x) {
		if (end &gt;= 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) &gt; 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&lt;Integer, Integer&gt; map = new HashMap&lt;Integer, Integer&gt;();

		for (int i = 0; i &lt; 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(&quot;Element not present&quot;);
		}
		else {
			System.out.println(&quot;Element found at index &quot; + result);
		}
	}
}

I have given array of integers added unsorted and integer that I want to find on which position it is. I want to use binary search which use only sorted arrays so I sort the numbers from the array and save their first position. Every help will be good.

Thanks in advance!

答案1

得分: 0

  这是答案

    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);
    	}
英文:

Here is the answer

public static class MyEntry {
		int key;
		int value;

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

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

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

		
		mid = (high + low) / 2;
	
		if (high &gt;= low) {
		
			if (arr[mid].key == k) {
				return (mid);
			}
			if (arr[mid].key &gt; 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 + &quot;dulj&quot;);
		MyEntry[] entry = new MyEntry[len];

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

		for (int i = 0; i &lt; entry.length; i++)
			System.out.print(i + &quot;:&quot; + entry[i]);
		System.out.println();

		int result = BinSearch(entry,0, len-1, 8);
		System.out.println(result);
	}

huangapple
  • 本文由 发表于 2020年4月7日 19:42:58
  • 转载请务必保留本文链接:https://java.coder-hub.com/61079284.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定