英文:
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<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);
}
}
}
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 ("(" + 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);
}
专注分享java语言的经验与见解,让所有开发者获益!
评论