यह बहुत छोड़कर अगर यह सही कुंजी नहीं मिल रहा है एक द्विआधारी खोज के समान है, यह होगा आर एक कुंजी प्रदान करें कुंजी प्रदान की कुंजी के बहुत करीब होगा।
तर्क तब तक खोजना है जब तक सटीक कुंजी नहीं मिलती है या जब तक बाइनरी खोज करते समय उच्च कुंजी और निम्न के बीच बिल्कुल एक कुंजी शेष नहीं होती है।
एक सरणी पर विचार करें n [] = {1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20}
अगर आप कुंजी के लिए खोज: 2 तो वह एल्गोरिथ्म, नीचे का उपयोग कर
चरण 1: उच्च = 10, कम = 0, मेड = 5
चरण 2: उच्च = 5, कम = 0, मेड = 2
चरण 3: उच्च = 2, कम = 0, med = 1 इसमें सही कुंजी पाएं कदम। तो यह रिटर्न 1.
यदि आप के लिए महत्वपूर्ण खोज: 3 (जो सरणी में मौजूद नहीं है), तो नीचे दिए गए एल्गोरिथ्म
चरण 1 का उपयोग कर: उच्च = 10, कम = 0, मेड = 5
चरण 2: उच्च = 5, कम = 0, मेड = 2
चरण 3: उच्च = 2, कम = 0, मेड = 1
चरण 4: उच्च = 1, कम = 0, इस चरण में उच्च = कम + 1 यानी खोज करने के लिए कोई और तत्व नहीं है। तो यह med = 1 देता है।
आशा है कि इससे मदद मिलती है ...
public static <T> int binarySearch(List<T> list, T key, Comparator<T> compare) {
int low, high, med, c;
T temp;
high = list.size();
low = 0;
med = (high + low)/2;
while (high != low+1) {
temp = list.get(med);
c = compare.compare(temp, key);
if (c == 0) {
return med;
} else if (c < 0){
low = med;
}else{
high = med;
}
med = (high + low)/2;
}
return med;
}
/** ------------------------ Example -------------------- **/
public static void main(String[] args) {
List<Integer> nos = new ArrayList<Integer>();
nos.addAll(Arrays.asList(new Integer[]{1, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20}));
search(nos, 2); // Output Search:2 Key:1 Value:2
search(nos, 3); // Output Search:3 Key:1 Value:2
search(nos, 10); // Output Search:10 Key:5 Value:10
search(nos, 11); // Output Search:11 Key:5 Value:10
}
public static void search(List<Integer> nos, int search){
int key = binarySearch(nos, search, new IntComparator());
System.out.println("Search:"+search+"\tKey:"+key+"\tValue:"+nos.get(key));
}
public static class IntComparator implements Comparator<Integer>{
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
}
कोई डुप्लिकेट मानों हैं? क्या आप मूल्यों की सीमा जानते हैं (यानी, 1
Seth