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

C++ प्रोग्राम: मीडियन के निकटतम k नंबर खोजना


यह C++ प्रोग्राम एक सेट S (n नंबर्स) के मीडियन (Median) के निकटतम k नंबर खोजता है। यह क्विकसॉर्ट द्वारा सॉर्टिंग के बाद मीडियन के दोनों ओर से निकटतम तत्व चुनता है।

एल्गोरिदम

शुरुआत
  1. फंक्शन Partition() - हाई पर पिवट के आधार पर ऐरे पार्टीशन करें
  2. फंक्शन QuickSort() - क्विकसॉर्ट एल्गोरिदम से डेटा सॉर्ट करें
  3. मेन फंक्शन:
     - यदि डेटा तत्वों की संख्या विषम है:
         * मध्य इंडेक्स को low और अगले को high असाइन करें, मीडियन कैलकुलेट करें
         * k बार लूप चलाएं और मीडियन के निकटतम तत्व प्रिंट करें
     - अन्यथा (सम संख्या):
         * मीडियन दो मध्य मानों का औसत होगा
         * k बार लूप चलाएं और मीडियन के निकटतम तत्व प्रिंट करें
समाप्ति

उदाहरण कोड

#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;

void swap(int *x, int *y) {
    int tmp = *x;
    *x = *y;
    *y = tmp;
}

int Partition(int a[], int l, int h) {
    int pivot = h, index = l;
    for (int i = l; i < h; i++) {
        if (a[i] < a[pivot]) {
            swap(&a[i], &a[index]);
            index++;
        }
    }
    swap(&a[pivot], &a[index]);
    return index;
}

void QuickSort(int a[], int l, int h) {
    if (l < h) {
        int pindex = Partition(a, l, h);
        QuickSort(a, l, pindex - 1);
        QuickSort(a, pindex + 1, h);
    }
}

int main() {
    int n, k;
    cout << "Enter number of elements in dataset: ";
    cin >> n;
    
    int a[n];
    for (int i = 0; i < n; i++) {
        cout << "Enter element " << i+1 << ": ";
        cin >> a[i];
    }
    
    cout << "\nEnter number of elements nearest to median: ";
    cin >> k;
    
    QuickSort(a, 0, n-1);
    
    double median;
    int left, right;
    
    if (n % 2 == 1) {
        median = a[n/2];
        left = n/2 - 1;
        right = n/2 + 1;
    } else {
        median = (a[n/2 - 1] + a[n/2]) / 2.0;
        left = n/2 - 1;
        right = n/2;
    }
    
    cout << "Sorted array: ";
    for (int i = 0; i < n; i++) cout << a[i] << " ";
    cout << "\nMedian: " << median;
    cout << "\nThe " << k << " elements nearest to median: ";
    
    while (k > 0) {
        double diffLeft = (left >= 0) ? abs(median - a[left]) : 1e9;
        double diffRight = (right < n) ? abs(a[right] - median) : 1e9;
        
        if (diffLeft <= diffRight && left >= 0) {
            cout << a[left] << " ";
            left--;
        } else if (right < n) {
            cout << a[right] << " ";
            right++;
        } else break;
        k--;
    }
    cout << endl;
    return 0;
}

आउटपुट

Enter number of elements in dataset: 7
Enter element 1: 7
Enter element 2: 6
Enter element 3: 5
Enter element 4: 4
Enter element 5: 3
Enter element 6: 2
Enter element 7: 1
Enter number of elements nearest to median: 2

Sorted array: 1 2 3 4 5 6 7
Median: 4
The 2 elements nearest to median: 3 5

व्याख्या: सॉर्टेड ऐरे [1,2,3,4,5,6,7] में मीडियन 4 है। इसके निकटतम दो तत्व 3 और 5 हैं (दोनों की दूरी 1 है)। प्रोग्राम दोनों तरफ से तुलना करके निकटतम तत्व चुनता है।

समय जटिलता: O(n log n) सॉर्टिंग के लिए, O(k) निकटतम तत्व खोजने के लिए।

  1. - C++ प्रोग्राम: संख्याओं के एरे के गुणनफल का पहला अंक ज्ञात करना

    इस लेख में, हम एक प्रोग्राम पर चर्चा करेंगे जो दिए गए एरे के तत्वों के गुणनफल का पहला अंक ज्ञात करता है। उदाहरण के लिए, मान लीजिए हमें एक एरे दिया गया है। arr = {12, 5, 16} तो इन तत्वों का गुणनफल 12*5*16 = 960 होगा। इसलिए, इस मामले में परिणाम यानी गुणनफल का पहला अंक 9 होगा। उदाहरण #include <bits

  1. - C++ प्रोग्राम: डिस्जॉइंट सेट डेटा स्ट्रक्चर इम्प्लीमेंट करें

    डिस्जॉइंट सेट मूल रूप से सेट्स का एक समूह है जहां कोई आइटम एक से अधिक सेट में नहीं हो सकता। यह सबसेट्स पर यूनियन और फाइंड ऑपरेशन का समर्थन करता है। Find(): इसका उपयोग यह पता लगाने के लिए किया जाता है कि कोई विशेष तत्व किस सबसेट में है और उस विशेष सेट के प्रतिनिधि को लौटाता है। Union(): यह दो अलग-अल

  1. - C++ प्रोग्राम: दो अलग-अलग सरणियों में संग्रहीत तत्वों की माध्यिका खोजें

    एल्गोरिदमMedian() फ़ंक्शन में दो सरणी a1[], a2[] और n = तत्वों की संख्या लें। i और j को 0 से प्रारंभ करें, n1 और n2 को -1 से। 0 से n तक लूप चलाएं: यदि i == n तो n1 = n2, n2 = a2[0], लूप तोड़ें। अन्यथा यदि j == n तो n1 = n2, n2 = a1[0], लूप तोड़ें। यदि a1[i] < a2[j] तो n1 = n2, n2 = a1[i], i बढ़ाएं।