हम जानते हैं कि बाइनरी सर्च एल्गोरिथम लीनियर सर्च एल्गोरिथम से बेहतर है। इस एल्गोरिथम को निष्पादित होने में O(log n) समय लगता है। हालांकि अधिकांश मामलों में लागू कोड में कुछ समस्या है। आइए नीचे की तरह एक बाइनरी सर्च एल्गोरिथम फ़ंक्शन पर विचार करें -
उदाहरण
int binarySearch(int array[], int start, int end, int key){ if(start <= end){ int mid = (start + end) /2); //mid location of the list if(array[mid] == key) return mid; if(array[mid] > key) return binarySearch(array, start, mid-1, key); return binarySearch(array, mid+1, end, key); } return -1; }
यह एल्गोरिथम तब तक ठीक काम करेगा जब तक कि प्रारंभ और अंत बड़ी संख्या में न पहुंच जाए। यदि (प्रारंभ + अंत) 2 32 . के मान से अधिक है - 1 तो यह रैप अप के बाद एक ऋणात्मक संख्या लौटा सकता है। और चूंकि ऋणात्मक संख्याएं सरणी अनुक्रमणिका के रूप में समर्थित नहीं हैं, तो इससे कुछ समस्या हो सकती है।
इस समस्या को दूर करने के लिए कुछ अलग तरीके हैं।
विधि 1
int mid = start + ((end - start) / 2)
दूसरी विधि केवल जावा में काम करेगी क्योंकि C या C++ में कोई>>> ऑपरेटर नहीं है।
विधि 2 (केवल जावा)
int mid = (start + end) >>> 1
चूंकि>>> सी या सी ++ में समर्थित नहीं है, तो हम निम्न विधि का उपयोग कर सकते हैं।
विधि 3
int mid = ((unsigned int) low + (unsigned int) high) >> 1