🔴 Advanced  ·  Lesson 41

Binary Search

Binary search क्या है?

मान लीजिए आप dictionary में कोई शब्द ढूँढते हैं। आप शुरू से हर पन्ना नहीं पढ़ते — आप बीच के पास खोलते हैं, देखते हैं कि आपका शब्द पहले है या बाद में, और छलाँग लगाते हैं। Binary search किसी sorted array पर ठीक यही करता है, और यह हर element एक-एक करके जाँचने से नाटकीय रूप से तेज़ है।

एक नियम: array पहले sorted होना चाहिए। यही binary search को हर कदम आधा data सुरक्षित रूप से हटाने देता है।

आधा करने का विचार

तीन markers रखें: low, high, और उनके बीच mid। Target की बीच वाले से तुलना करें:

  • अगर बराबर mid — मिल गया।
  • अगर छोटा — उत्तर बाएँ आधे में होगा, तो high नीचे करें।
  • अगर बड़ा — दाएँ आधे में होगा, तो low ऊपर करें।

हर तुलना बचे का आधा हटाती है। यही पूरी तरकीब है।

Iterative program

C Language
#include <stdio.h>
int binarySearch(int a[], int n, int key) {
    int low = 0, high = n - 1;
    while (low <= high) {
        int mid = low + (high - low) / 2;
        if (a[mid] == key)      return mid;   // mil gaya
        else if (a[mid] < key)  low = mid + 1; // daayein jaayein
        else                    high = mid - 1; // baayein jaayein
    }
    return -1;                  // nahi mila
}
int main() {
    int a[] = {10, 20, 30, 40, 50};
    int pos = binarySearch(a, 5, 40);
    if (pos != -1) printf("Found at index %d\n", pos);
    else           printf("Not found\n");
    return 0;
}
Output:
Found at index 3

Dry run

{10, 20, 30, 40, 50} में 40 ढूँढना:

कदमlowhighmida[mid]क्रिया
10423030 < 40 → दाएँ
2343403 पर मिला

चार के बजाय सिर्फ़ दो comparisons — और array बड़ा होते ही अंतर विशाल हो जाता है।

Recursive program

C Language
int binarySearch(int a[], int low, int high, int key) {
    if (low > high) return -1;              // base case
    int mid = low + (high - low) / 2;
    if (a[mid] == key)     return mid;
    if (a[mid] < key)      return binarySearch(a, mid + 1, high, key);
    else                   return binarySearch(a, low, mid - 1, key);
}

वही logic, loop के बजाय चुने आधे पर खुद को call करके व्यक्त।

यह इतना तेज़ क्यों है

Array sizeLinear search (worst)Binary search (worst)
1001007
1,0001,00010
1,000,0001,000,00020

चूँकि हर कदम data आधा करता है, binary search O(log n) में चलता है — दस लाख items को सिर्फ़ लगभग बीस जाँच चाहिए।

आम गलतियाँ

  • Unsorted array पर चलाना — परिणाम निरर्थक होता है।
  • (low + high) / 2 इस्तेमाल करना, जो overflow कर सकता है; low + (high - low) / 2 पसंद करें।
  • गलत loop condition — यह low <= high होनी चाहिए, < नहीं।
  • mid + 1 / mid - 1 से mid के आगे बढ़ना भूलना, जिससे infinite loop होता है।
🏋️ अभ्यास

ऐसी value ढूँढें जो array में नहीं है (जैसे 25) और पुष्टि करें कि यह −1 लौटाता है। फिर एक counter जोड़ें जो बताए कितनी comparisons लगीं, और सरल linear search से तुलना करें।

सारांश

  • Binary search sorted array में हर कदम आधा करके value ढूँढता है।
  • बीच से तुलना करें; वह आधा रखें जिसमें target हो सकता है।
  • Overflow टालने को बीच के लिए low + (high - low) / 2 इस्तेमाल करें।
  • Iterative और recursive versions समान परिणाम देते हैं।
  • यह O(log n) में चलता है — बड़े data पर linear search से कहीं तेज़।

अक्सर पूछे जाने वाले प्रश्न (FAQ)

C में binary search क्या है?
Binary search किसी sorted array में value ढूँढने का तेज़ तरीका है। यह बीच वाला element देखता है, और चूँकि array sorted है, यह एक कदम में आधा array हटा सकता है — इसे तब तक दोहराते हुए जब तक value मिल न जाए या elements खत्म न हों। यह हर item जाँचने से कहीं तेज़ है।
Binary search के लिए array sorted क्यों होना चाहिए?
Binary search तय करता है कि कौन-सा आधा रखना है, target की बीच वाले element से तुलना करके। वह निर्णय तभी सही है जब बाईं ओर सब छोटा और दाईं ओर सब बड़ा हो — जिसकी sorted array ठीक गारंटी देता है। Unsorted array पर परिणाम गलत होगा।
Binary search की time complexity क्या है?
Binary search O(log n) time में चलता है क्योंकि हर कदम बचे elements की संख्या आधी करता है। दस लाख items के लिए इसे सिर्फ़ लगभग बीस comparisons चाहिए, linear search के दस लाख तक की तुलना में, इसीलिए यह बड़े sorted data पर इतना तेज़ है।
Iterative और recursive binary search में क्या अंतर है?
दोनों वही halving logic इस्तेमाल करते हैं। Iterative version एक loop इस्तेमाल करता है और low तथा high को तब तक update करता है जब तक वे पार न हों, constant अतिरिक्त space में। Recursive version चुने आधे पर खुद को call करता है; यह सुंदर है पर हर call के लिए stack space लेता है। परिणाम समान हैं।
Binary search बीच वाला element कैसे ढूँढता है?
यह बीच का index low + (high - low) / 2 के रूप में गिनता है। (low + high) / 2 के बजाय ऐसे लिखना low और high के बहुत बड़े होने पर संभावित overflow टालता है, फिर भी बीच की स्थिति पर पहुँचता है।
← Back to C Tutorial
🔗

Share this topic with a friend

यह topic किसी दोस्त को भेजें

Found it useful? Send it to a classmate learning the same thing.

अच्छा लगा? जो दोस्त यही सीख रहा है, उसे भेज दीजिए।

💻 लाइव कोड एडिटर

इस पेज के प्रोग्राम यहीं तैयार हैं — चलाएँ, बदलें और सीखें। कुछ भी इंस्टॉल किए बिना।
OneCompiler द्वारा संचालित। कोड एडिटर में अपने आप आ जाता है — Run दबाकर आउटपुट देखें। अगर एडिटर न खुले तो नए टैब में खोलें.