আমাদের একটি অ্যারে দেওয়া আছে; আমাদের এই অ্যারে এমনভাবে অ্যারেঞ্জ করতে হবে যেন প্রথম এলিমেন্ট মিনিমাম হয়, দ্বিতীয় এলিমেন্ট ম্যাক্সিমাম হয়, তৃতীয় এলিমেন্ট ২য় মিনিমাম হয়, চতুর্থ এলিমেন্ট ২য় ম্যাক্সিমাম হয় এবং এভাবেই চলবে। উদাহরণস্বরূপ −
ইনপুট : arr[ ] = { 13, 34, 30, 56, 78, 3 }
আউটপুট : { 3, 78, 13, 56, 34, 30 }
ব্যাখ্যা : অ্যারে রি-অর্ডার্ড হয়েছে { 1st min, 1st max, 2nd min, 2nd max, 3rd min, 3rd max } অর্ডারে
ইনপুট : arr[ ] = { 2, 4, 6, 8, 11, 13, 15 }
আউটপুট : { 2, 15, 4, 13, 6, 11, 8 }
সমাধানের পদ্ধতি
এই সমস্যা দুটি ভেরিয়েবল 'x' এবং 'y' ব্যবহার করে সমাধান করা যায় যেখানে সেগুলো ম্যাক্সিমাম এবং মিনিমাম এলিমেন্টের দিকে পয়েন্ট করবে, কিন্তু তার জন্য অ্যারেটি সর্টেড হতে হবে, তাই আমাদের প্রথমে অ্যারে সর্ট করতে হবে। তারপর একই সাইজের একটি খালি অ্যারে তৈরি করব রি-অর্ডার্ড অ্যারে সংরক্ষণ করার জন্য। এখন অ্যারেটার ওপর ইটারেট করব এবং যদি ইটারেটিভ এলিমেন্ট ইভেন ইনডেক্সে থাকে, তবে arr[x] এলিমেন্টটি খালি অ্যারেতে যোগ করব এবং x কে ১ দিয়ে ইনক্রিমেন্ট করব। যদি এলিমেন্ট অড ইনডেক্সে থাকে, তবে arr[y] এলিমেন্টটি খালি অ্যারেতে যোগ করব এবং y কে ১ দিয়ে ডিক্রিমেন্ট করব। y, x-র চেয়ে ছোট হয় না পর্যন্ত এটি করব।
উদাহরণ প্রোগ্রাম
#include <bits/stdc++.h>
using namespace std;
int main() {
int arr[] = { 2, 4, 6, 8, 11, 13, 15 };
int n = sizeof(arr) / sizeof(arr[0]);
// রি-অর্ডার্ড অ্যারে সংরক্ষণ করার জন্য নতুন অ্যারে তৈরি
int reordered_array[n];
// মূল অ্যারে সর্ট করা
sort(arr, arr + n);
// ভেরিয়েবলগুলো মিনিমাম এবং ম্যাক্সিমাম এলিমেন্ট ইনডেক্সে পয়েন্ট করা
int x = 0, y = n - 1;
int i = 0;
// max, min-র চেয়ে ছোট বা সমান হওয়া পর্যন্ত অ্যারে ওভার ইটারেট করা
while (x <= y) {
// যদি i ইভেন হয় তবে max ইনডেক্স এলিমেন্ট স্টোর করা
if (i % 2 == 0) {
reordered_array[i] = arr[x];
x++;
}
// min ইনডেক্স এলিমেন্ট স্টোর করা
else {
reordered_array[i] = arr[y];
y--;
}
i++;
}
// রি-অর্ডার্ড অ্যারে প্রিন্ট করা।
for (int i = 0; i < n; i++)
cout << reordered_array[i] << " ";
// অথবা আমরা মূল অ্যারে আপডেট করতে পারি
// for (int i = 0; i < n; i++)
// arr[i] = reordered_array[i];
return 0;
}
আউটপুট
2 15 4 13 6 11 8
উপরোক্ত কোডের ব্যাখ্যা
- ভেরিয়েবল ইনিশিয়ালাইজ করা হয়েছে x=0 এবং y = array_length(n) - 1।
- while(x<=y) x, y-র চেয়ে বড় না হওয়া পর্যন্ত অ্যারে ট্রাভার্স করা।
- যদি কাউন্ট ইভেন হয় (x), এলিমেন্ট ফাইনাল অ্যারেতে যোগ করা হয় এবং ভেরিয়েবল x ১ দিয়ে ইনক্রিমেন্ট করা হয়।
- যদি i অড হয়, তবে (y) এলিমেন্ট ফাইনাল অ্যারেতে যোগ করা হয় এবং ভেরিয়েবল y ১ দিয়ে ডিক্রিমেন্ট করা হয়।
- শেষে, রি-অর্ডার্ড অ্যারে reordered_array[ ]-এ সংরক্ষিত হয়।
উপসংহার
এই আর্টিকেলে, আমরা দেয়া অ্যারেকে স্মোলেস্ট, লার্জেস্ট ফর্মে রি-অ্যারেঞ্জ করার সমাধান আলোচনা করেছি। আমরা একই জন্য C++ প্রোগ্রামও লিখেছি। একইভাবে, আমরা এই প্রোগ্রাম যেকোনো অন্য ল্যাঙ্গুয়েজে লিখতে পারি যেমন C, Java, Python, ইত্যাদি। আশা করি আপনি এই আর্টিকেলটিকে সহায়ক খুঁজে পাবেন।