কম্পিউটার

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 তে নিম্ন সূচক সহ সংখ্যাটিকে অন্য সংখ্যার চেয়ে ছোট হিসাবে গণ্য করা হবে
  • যদি A2 তে num1 বা num2 থাকে, তাহলে সেই সংখ্যাটিকে অন্যটির থেকে ছোট হিসাবে গণ্য করা হবে, যেটি 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. C++ এ সেট বিটের গণনা অনুসারে একটি অ্যারে সাজান

  2. জিনোম সাজানোর জন্য সি++ প্রোগ্রাম?

  3. গণনা সাজানোর জন্য C++ প্রোগ্রাম

  4. শেকার সাজানোর জন্য C++ প্রোগ্রাম