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

सी/सी++ प्रोग्राम मर्ज सॉर्ट का उपयोग करके एक सरणी में व्युत्क्रमों की गणना करने के लिए?

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

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

सी/सी++ प्रोग्राम मर्ज सॉर्ट का उपयोग करके एक सरणी में व्युत्क्रमों की गणना करने के लिए?

सी/सी++ प्रोग्राम मर्ज सॉर्ट का उपयोग करके एक सरणी में व्युत्क्रमों की गणना करने के लिए?

सी/सी++ प्रोग्राम मर्ज सॉर्ट का उपयोग करके एक सरणी में व्युत्क्रमों की गणना करने के लिए?

सी/सी++ प्रोग्राम मर्ज सॉर्ट का उपयोग करके एक सरणी में व्युत्क्रमों की गणना करने के लिए?

सी/सी++ प्रोग्राम मर्ज सॉर्ट का उपयोग करके एक सरणी में व्युत्क्रमों की गणना करने के लिए?

सी/सी++ प्रोग्राम मर्ज सॉर्ट का उपयोग करके एक सरणी में व्युत्क्रमों की गणना करने के लिए?

Input: arr[] = { 1, 9, 6, 4, 5}
Output: Inversion count is 5

स्पष्टीकरण

किसी सरणी की उलटी गिनती

एक सरणी को देखते हुए, इसके व्युत्क्रमों की संख्या ज्ञात कीजिए। यदि (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) // if run size == 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. सी ++ प्रोग्राम मर्ज सॉर्ट को लागू करने के लिए

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

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

    दिए गए डेटा को सॉर्ट करने के लिए शेकर सॉर्ट का उपयोग किया जाता है। बबल सॉर्ट के विपरीत, शेकर सॉर्ट, दोनों दिशाओं में सरणी को ऑर्डर करता है। इस एल्गोरिथम की सबसे खराब जटिलता O(n^2) है। एल्गोरिदम Begin    ShakerSort() function has ‘arr’ the array of data and ‘n’ the n

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

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