কম্পিউটার টিউটোরিয়াল

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): 
শুরু 
    যদি num1 এবং num2 দুটোই A2-তে উপস্থিত থাকে, তবে
        num1-এর ইনডেক্স - num2-এর ইনডেক্স রিটার্ন করো
    অন্যথায় যদি num1 A2-তে না থাকে, তবে
        -1 রিটার্ন করো
    অন্যথায় যদি num2 A1-তে না থাকে, তবে
        1 রিটার্ন করো
    অন্যথায়
        num1 - num2
শেষ

উদাহরণ (C++ কোড)

#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++-এ সেট বিট কাউন্ট অনুযায়ী অ্যারে সর্ট করা

  2. Gnome Sort অ্যালগরিদম (C++)

  3. C++ প্রোগ্রাম: কাউন্টিং সর্ট বাস্তবায়ন

  4. শেকার সার্ট বাস্তবায়ন করার C++ প্রোগ্রাম