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

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    यदि num1 और num2 दोनों A2 में मौजूद हैं, तो       return num1 का इंडेक्स – num2 का इंडेक्स    else यदि num1 A2 में नहीं है, तो       return -1    else यदि num2 A1 में नहीं है, तो       return 1    else       num1 – num2 End

उदाहरण

#include<iostream> #include<algorithm> using namespace std; int size = 5; int A2[5]; //ग्लोबल A2 कम्पेयर फंक्शन में उपयोग होगा 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. - C++ में नोम सॉर्ट (Gnome Sort) प्रोग्राम

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

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

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

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

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