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

सी ++ में किसी अन्य सरणी द्वारा परिभाषित क्रम के अनुसार एक सरणी को क्रमबद्ध करें

इस खंड में हम एक और छँटाई समस्या देखेंगे। मान लीजिए कि हमारे पास दो सरणियाँ हैं A1 और A2। हमें A1 को इस तरह से क्रमबद्ध करना है कि तत्वों के बीच सापेक्ष क्रम वही होगा जो A2 में है। यदि A2 में कुछ तत्व मौजूद नहीं हैं, तो उन्हें सॉर्ट किए गए तत्वों के बाद जोड़ा जाएगा। मान लीजिए A1 और A2 निम्नलिखित हैं -

A1 = {2, 1, 2, 1, 7, 5, 9, 3, 8, 6, 8}
A2 = {2, 1, 8, 3}

छँटाई के बाद A1 नीचे जैसा होगा -

A1 = {2, 2, 1, 1, 8, 8, 3, 5, 6, 7, 9}

इस समस्या को हल करने के लिए, हम अपनी कस्टम तुलना विधि बनाएंगे। वह विधि तत्वों की तुलना और सरणी में रखेगी। तुलना तर्क नीचे जैसा होगा -

  • यदि num1 और num2 दोनों A2 में हैं, तो A2 में निचली अनुक्रमणिका वाली संख्या को अन्य संख्या से छोटा माना जाएगा
  • यदि या तो num1 या num2 A2 में मौजूद है, तो उस संख्या को अन्य की तुलना में छोटा माना जाएगा, जो A2 में मौजूद नहीं है।
  • यदि दोनों A2 में मौजूद नहीं हैं, तो प्राकृतिक क्रम का उपयोग किया जाएगा।

एल्गोरिदम

compare(num1, num2):
Begin
   if both num1 and num2 are present in A2, then
      return index of num1 – index of num2
   else if num1 is not in A2, then
      return -1
   else if num2 is not in A1, then
      return 1
   else
      num1 – num2
End
. लौटाएं

उदाहरण

#include<iostream>
#include<algorithm>
using namespace std;
int size = 5;
int A2[5]; //global A2 will be used in compare function
int search_index(int key){
   int index = 0;
   for(int i = 0; i < size; i++){
      if(A2[i] == key)
      return i;
   }
   return -1;
}
int compare(const void *num1, const void *num2){
   int index1 = search_index(*(int*)num1);
   int index2 = search_index(*(int*)num2);
   if (index1 != -1 && index2 != -1)
   return index1 - index2;
   else if (index1 != -1)
      return -1;
   else if (index2 != -1)
      return 1;
   else
      return (*(int*)num1 - *(int*)num2);
}
main(){
   int data[] = {2, 1, 2, 1, 7, 5, 9, 3, 8, 6, 8};
   int n = sizeof(data)/sizeof(data[0]);
   int a2[] = {2, 1, 8, 3};
   int n2 = sizeof(a2)/sizeof(a2[0]);
   for(int i = 0; i<n2; i++){
      A2[i] = a2[i];
   }
   qsort(data, n, sizeof(int), compare);
   for(int i = 0; i<n; i++){
      cout << data[i] << " ";
   }
}

आउटपुट

2 2 1 1 8 8 3 5 6 7 9

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

    ग्नोम सॉर्ट एक सॉर्टिंग एल्गोरिथम है जो इंसर्शन सॉर्ट के समान है, सिवाय इसके कि किसी तत्व को उसके उचित स्थान पर ले जाना स्वैप की एक श्रृंखला द्वारा पूरा किया जाता है, जैसे बबल सॉर्ट में। Input: 53421 Output: 12345 स्पष्टीकरण सॉर्टिंग एल्गोरिदम जो किसी तत्व को उसके उचित स्थान पर ले जाता है, स्वैप की

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

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

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

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