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

मर्ज सॉर्ट का उपयोग करके ऐरे में इनवर्जन गिनने के लिए C/C++ प्रोग्राम?


दिए गए ऐरे को क्रमबद्ध करने के लिए होने वाले इनवर्जन की संख्या को इनवर्जन काउंट (inversion count) के रूप में जाना जाता है। इनवर्जन समस्या एक शास्त्रीय समस्या है जिसे मर्ज सॉर्ट एल्गोरिदम का उपयोग करके हल किया जा सकता है। इस समस्या में हम इसके बाईं ओर उससे बड़े सभी एलिमेंट्स को गिनेंगे और काउंट को आउटपुट में जोड़ेंगे। यह तर्क मर्ज सॉर्ट के मर्ज फ़ंक्शन के अंदर किया जाता है।

विषय को बेहतर ढंग से समझने के लिए एक उदाहरण लेते हैं। आइए मर्ज प्रक्रिया में शामिल दो सब-ऐरे पर विचार करें -

मर्ज सॉर्ट का उपयोग करके ऐरे में इनवर्जन गिनने के लिए C/C++ प्रोग्राम?

मर्ज सॉर्ट का उपयोग करके ऐरे में इनवर्जन गिनने के लिए C/C++ प्रोग्राम?

मर्ज सॉर्ट का उपयोग करके ऐरे में इनवर्जन गिनने के लिए C/C++ प्रोग्राम?

मर्ज सॉर्ट का उपयोग करके ऐरे में इनवर्जन गिनने के लिए C/C++ प्रोग्राम?

मर्ज सॉर्ट का उपयोग करके ऐरे में इनवर्जन गिनने के लिए C/C++ प्रोग्राम?

मर्ज सॉर्ट का उपयोग करके ऐरे में इनवर्जन गिनने के लिए C/C++ प्रोग्राम?

Input: arr[] = { 1, 9, 6, 4, 5} Output: इनवर्जन काउंट 5 है

व्याख्या

ऐरे का इनवर्जन काउंट

एक ऐरे दिया गया है, इसके इनवर्जन की संख्या ढूंढें। यदि (i < j) और (A[i] > A[j]) तो युग्म (i, j) को ऐरे A का इनवर्जन कहा जाता है। हमें ऐरे में ऐसे सभी युग्मों को गिनना है।

उदाहरण के लिए,

ऐरे में 5 इनवर्जन हैं

(9,6), (9,4), (9,5), (6,4), (6,5)

1. एलिमेंट्स के मानों की तुलना एक-दूसरे से करें।

2. काउंटर बढ़ाएं यदि निचले इंडेक्स पर मान अधिक है।

3. परिणाम प्रदर्शित करें।

उदाहरण

#include <stdio.h>
int Merge(int arr[], int aux[], int low, int mid, int high) {
    int k = low, i = low, j = mid + 1;
    int inversionCount = 0;
    while (i <= mid && j <= high) {
        if (arr[i] <= arr[j]) {
            aux[k++] = arr[i++];
        } else {
            aux[k++] = arr[j++];
            inversionCount += (mid - i + 1); // NOTE
        }
    }
    while (i <= mid)
        aux[k++] = arr[i++];
    for (int i = low; i <= high; i++)
        arr[i] = aux[i];
    return inversionCount;
}
int MergeSort(int arr[], int aux[], int low, int high) {
    if (high == low) // यदि रन आकार == 1
        return 0;
    int mid = (low + ((high - low) >> 1));
    int inversionCount = 0;
    inversionCount += MergeSort(arr, aux, low, mid);
    inversionCount += MergeSort(arr, aux, mid + 1, high);
    inversionCount += Merge(arr, aux, low, mid, high);
    return inversionCount;
}
int main() {
    int arr[] = { 1, 9, 6, 4, 5 };
    int N = 5;
    int aux[N];
    for (int i = 0; i < N; i++)
        aux[i] = arr[i];
    printf("Inversion count is %d", MergeSort(arr, aux, 0, N - 1));
    return 0;
}

  1. - C++ प्रोग्राम: मर्ज सॉर्ट लागू करना

    मर्ज सॉर्ट तकनीक विभाजन और विजय तकनीक पर आधारित है। हम पूरे डेटा सेट को छोटे भागों में विभाजित करते हैं और उन्हें क्रमबद्ध क्रम में एक बड़े टुकड़े में मर्ज करते हैं। यह सबसे खराब मामलों के लिए भी बहुत प्रभावी है क्योंकि इस एल्गोरिदम में सबसे खराब स्थिति के लिए भी कम समय जटिलता है। मर्ज सॉर्ट तकनीक

  1. - शेकर सॉर्ट करने के लिए C++ प्रोग्राम

    शेकर सॉर्ट का उपयोग दिए गए डेटा को सॉर्ट करने के लिए किया जाता है। बबल सॉर्ट के विपरीत, शेकर सॉर्ट सरणी को दोनों दिशाओं में ऑर्डर करता है। इस एल्गोरिदम की सबसे खराब जटिलता O(n^2) है। एल्गोरिदम शुरुआत    ShakerSort() फ़ंक्शन में arr डेटा की सरणी और n मानों की संख्या, आर्गुमेंट सूची में होती

  1. - C++ में हीप सॉर्ट एल्गोरिदम का उपयोग करके 10 तत्वों की सरणी को सॉर्ट करने का प्रोग्राम

    हीप सॉर्ट बाइनरी हीप डेटा संरचना पर आधारित है। बाइनरी हीप में, मैक्स हीप के मामले में पैरेंट नोड के चाइल्ड नोड्स उससे छोटे या बराबर होते हैं, और मिन हीप के मामले में चाइल्ड नोड्स पैरेंट से बड़े या बराबर होते हैं। हीप सॉर्ट के सभी चरणों को समझाने वाला एक उदाहरण निम्नलिखित है। सॉर्टिंग से पहले 10 तत्व