[英]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.