Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C भाषा में खोज तकनीकें (Searching Techniques)


खोज (Searching) का परिचय

खोज तकनीक का अर्थ है किसी सूची में किसी कुंजी तत्व (key element) को ढूंढना। यदि तत्व मिल जाता है तो खोज सफल (successful), अन्यथा असफल (unsuccessful) होती है।

C में दो प्रमुख खोज तकनीकें

  1. रैखिक खोज (Linear Search)
  2. द्विआधारी खोज (Binary Search)

1. रैखिक खोज (Linear Search)

  • सबसे सरल खोज विधि।
  • तत्वों को एक-एक करके क्रमबद्ध तरीके से जांचा जाता है।
  • सूची का क्रमबद्ध (sorted) होना आवश्यक नहीं।
  • समय जटिलता: O(n) - बड़े डेटा के लिए धीमी।

एल्गोरिदम

  1. सूची के पहले तत्व से शुरू करें।
  2. प्रत्येक तत्व की तुलना कुंजी से करें।
  3. मिलने पर सूचकांक लौटाएं।
  4. अंत तक न मिलने पर -1 या असफलता संदेश दें।

C प्रोग्राम: रैखिक खोज

#include <stdio.h>

int linearSearch(int arr[], int n, int key) {
    for (int i = 0; i < n; i++) {
        if (arr[i] == key)
            return i;  // मिल गया, सूचकांक लौटाएं
    }
    return -1;  // नहीं मिला
}

int main() {
    int n, key;
    printf("तत्वों की संख्या: ");
    scanf("%d", &n);
    
    int arr[n];
    printf("%d तत्व दर्ज करें:\n", n);
    for (int i = 0; i < n; i++)
        scanf("%d", &arr[i]);
    
    printf("खोजने वाला तत्व: ");
    scanf("%d", &key);
    
    int result = linearSearch(arr, n, key);
    if (result != -1)
        printf("तत्व सूचकांक %d पर मिला।\n", result);
    else
        printf("तत्व नहीं मिला।\n");
    
    return 0;
}

2. द्विआधारी खोज (Binary Search)

  • केवल क्रमबद्ध (sorted) सूची पर काम करता है।
  • सूची को बार-बार आधा करके खोजता है।
  • समय जटिलता: O(log n) - रैखिक खोज से बहुत तेज।

एल्गोरिदम

  1. निम्न (low=0) और उच्च (high=n-1) सूचकांक सेट करें।
  2. मध्य (mid = (low+high)/2) निकालें।
  3. यदि arr[mid] == key → मिल गया।
  4. यदि key < arr[mid] → high = mid-1 (बाएं आधे में खोजें)।
  5. यदि key > arr[mid] → low = mid+1 (दाएं आधे में खोजें)।
  6. low > high होने तक दोहराएं।

C प्रोग्राम: द्विआधारी खोज

#include <stdio.h>

int binarySearch(int arr[], int n, int key) {
    int low = 0, high = n - 1;
    
    while (low <= high) {
        int mid = (low + high) / 2;
        if (arr[mid] == key)
            return mid;
        else if (key < arr[mid])
            high = mid - 1;
        else
            low = mid + 1;
    }
    return -1;
}

int main() {
    int n, key;
    printf("क्रमबद्ध तत्वों की संख्या: ");
    scanf("%d", &n);
    
    int arr[n];
    printf("क्रमबद्ध क्रम में %d तत्व दर्ज करें:\n", n);
    for (int i = 0; i < n; i++)
        scanf("%d", &arr[i]);
    
    printf("खोजने वाला तत्व: ");
    scanf("%d", &key);
    
    int result = binarySearch(arr, n, key);
    if (result != -1)
        printf("तत्व सूचकांक %d पर मिला।\n", result);
    else
        printf("तत्व नहीं मिला।\n");
    
    return 0;
}

तुलना

विशेषतारैखिक खोजद्विआधारी खोज
पूर्वापेक्षाकोई नहींक्रमबद्ध सूची
समय जटिलताO(n)O(log n)
स्थान जटिलताO(1)O(1) पुनरावृत्तिमें, O(log n) पुनरावर्तन में
उपयुक्तछोटी/अक्रमबद्ध सूचीबड़ी क्रमबद्ध सूची
  1. C भाषा में क्यू में एलिमेंट्स इन्सर्ट करना C भाषा में क्यू में एलिमेंट्स इन्सर्ट करना

    डेटा स्ट्रक्चर संरचित तरीके से व्यवस्थित डेटा का संग्रह है। इसे दो प्रकारों में विभाजित किया गया है: लीनियर डेटा स्ट्रक्चर - डेटा लीनियर फैशन में व्यवस्थित है। उदाहरण: ऐरे, स्ट्रक्चर्स, स्टैक्स, क्यूज, लिंक्ड लिस्ट। नॉन-लीनियर डेटा स्ट्रक्चर - डेटा हायरार्किकल तरीके से व्यवस्थित है। उदाहरण: ट्रीज,

  1. C भाषा में विभिन्न ऑपरेटर और एक्सप्रेशन C भाषा में विभिन्न ऑपरेटर और एक्सप्रेशन

    C भाषा में ऑपरेटर्स का परिचय ऑपरेटर डेटा पर ऑपरेशन करते हैं। इन्हें निम्न श्रेणियों में वर्गीकृत किया गया है: अंकगणितीय ऑपरेटर्स (Arithmetic Operators) संबंधपरक ऑपरेटर्स (Relational Operators) तार्किक ऑपरेटर्स (Logical Operators) असाइनमेंट ऑपरेटर्स (Assignment Operators) इन्क्रीमेंट और डिक्रीमेंट ऑ

  1. C भाषा में शिफ्ट ऑपरेशन क्या हैं? C भाषा में शिफ्ट ऑपरेशन क्या हैं?

    समस्या C भाषा का उपयोग करके किसी संख्या के बाएं शिफ्ट, दाएं शिफ्ट और कॉम्प्लीमेंट को दिखाने का सरल प्रोग्राम क्या है? समाधान बाएं शिफ्ट (Left Shift) यदि किसी वेरिएबल का मान एक बार बाएं शिफ्ट किया जाता है, तो उसका मान दोगुना हो जाता है। उदाहरण के लिए, a = 10, तो a<<1 = 20 दाएं शिफ्ट (Right Sh