আমাদের একটি পূর্ণসংখ্যা অ্যারে দেওয়া আছে যা সর্টেড বা আনসর্টেড যেকোনোভাবে থাকতে পারে। কাজটি হল প্রথমে অ্যারেটি সর্ট করা যদি মানগুলো আনসর্টেড থাকে, তারপর অ্যারেটিকে এমনভাবে সাজানো যাতে অ্যারের প্রথম উপাদানটি হবে সর্বোচ্চ মান, দ্বিতীয়টি হবে সর্বনিম্ন মান, তৃতীয়টি হবে দ্বিতীয় সর্বোচ্চ মান, চতুর্থটি হবে দ্বিতীয় সর্বনিম্ন মান এবং এভাবে চলতে থাকবে।
বিভিন্ন ইনপুট-আউটপুট পরিস্থিতি দেখে নিই -
ইনপুট - int arr[] = {7, 5, 2, 3, 4, 9, 10, 5 }
আউটপুট - পুনর্বিন্যাসের আগে অ্যারে: 2 3 4 5 5 7 9 10 সর্বোচ্চ-নিম্ন রূপে অ্যারে পুনর্বিন্যাস: 10 2 9 3 7 4 5 5
ব্যাখ্যা - আমাদের একটি পূর্ণসংখ্যা টাইপের অ্যারে দেওয়া আছে যার মানগুলো হল {7, 5, 2, 3, 4, 9, 10, 5 }। প্রথমে আমরা অ্যারেটি সর্ট করব এবং সেটি হবে {2 3 4 5 5 7 9 10 }। দ্বিতীয়ত, সর্বোচ্চ উপাদানটি arr[0]-এ রাখব অর্থাৎ 10, তারপর সর্বনিম্ন উপাদানটি arr[1]-এ রাখব অর্থাৎ 2, তারপর দ্বিতীয় সর্বোচ্চ উপাদানটি arr[2]-এ রাখব অর্থাৎ 9 এবং এভাবে চলতে থাকবে। চূড়ান্ত ফলাফল অ্যারেটি হবে 10 2 9 3 7 4 5 5
ইনপুট - int arr[] = {2, 4, 1, 6, 7}
আউটপুট - পুনর্বিন্যাসের আগে অ্যারে: 1, 2, 4, 6, 7 সর্বোচ্চ-নিম্ন রূপে অ্যারে পুনর্বিন্যাস: 7, 1, 6, 2, 4
ব্যাখ্যা - আমাদের একটি পূর্ণসংখ্যা টাইপের অ্যারে দেওয়া আছে যার মানগুলো হল {2, 4, 1, 6, 7}। প্রথমে আমরা অ্যারেটি সর্ট করব এবং সেটি হবে {1, 2, 4, 6, 7}। দ্বিতীয়ত, সর্বোচ্চ উপাদানটি arr[0]-এ রাখব অর্থাৎ 7, তারপর সর্বনিম্ন উপাদানটি arr[1]-এ রাখব অর্থাৎ 1, তারপর দ্বিতীয় সর্বোচ্চ উপাদানটি arr[2]-এ রাখব অর্থাৎ 6 এবং এভাবে চলতে থাকবে। চূড়ান্ত ফলাফল অ্যারেটি হবে 7, 1, 6, 2, 4
নিচের প্রোগ্রামে ব্যবহৃত পদ্ধতি
- পূর্ণসংখ্যা টাইপের উপাদান 지닌 একটি অ্যারে ইনপুট নিন এবং অ্যারের আকার গণনা করুন। C++ STL-এর sort মেথডটি কল করুন arr[] এবং অ্যারের আকার আর্গুমেন্ট হিসেবে পাস করে।
- পুনর্বিন্যাসের আগে অ্যারে প্রিন্ট করুন এবং Rearr_Max_Min(arr, size) ফাংশনটি কল করুন
- Rearr_Max_Min(arr, size) ফাংশনের ভিতরে:
- একটি ভেরিয়েবল max ঘোষণা করুন এবং সেটি size - 1 দিয়ে সেট করুন এবং অন্য একটি ভেরিয়েবল min ঘোষণা করুন এবং সেটি 0 দিয়ে সেট করুন। একটি ভেরিয়েবল max_val ঘোষণা করুন এবং সেটি arr[size - 1] + 1 দিয়ে সেট করুন।
- i = ০ থেকে size পর্যন্ত একটি FOR লুপ শুরু করুন। লুপের ভিতরে চেক করুন IF i % 2 == 0 তবে arr[i] = arr[i] + (arr[max] % max_val) * max_val সেট করুন এবং max কে ১ কমানো।
- অন্যথায়, arr[i] = arr[i] + (arr[min] % max_val) * max_val সেট করুন এবং min কে ১ বাড়ান।
- i = ০ থেকে size পর্যন্ত একটি FOR লুপ শুরু করুন। লুপের ভিতরে arr[i] = arr[i] / max_val সেট করুন।
উদাহরণ
#include <bits/stdc++.h>
using namespace std;
void Rearr_Max_Min(int arr[], int size){
int max = size - 1;
int min = 0;
int max_val = arr[size - 1] + 1;
for (int i = 0; i < size; i++){
if (i % 2 == 0){
arr[i] += (arr[max] % max_val) * max_val;
max--;
}
else{
arr[i] += (arr[min] % max_val) * max_val;
min++;
}
}
for(int i = 0; i < size; i++){
arr[i] = arr[i] / max_val;
}
}
int main(){
//একটি অ্যারে ইনপুট
int arr[] = {7, 5, 2, 3, 4, 9, 10, 5 };
int size = sizeof(arr) / sizeof(arr[0]);
//অ্যারে সর্ট
sort(arr, arr + size);
//সর্টিংয়ের পর মূল অ্যারে প্রিন্ট
cout<<"Array before Arrangement: ";
for (int i = 0; i < size; i++){
cout << arr[i] << " ";
}
//অ্যারে পুনর্বিন্যাস করার জন্য ফাংশন কল
Rearr_Max_Min(arr, size);
//মানগুলোর পুনর্বিন্যাসের পর অ্যারে প্রিন্ট
cout<<"\nRearrangement of an array in maximum minimum form is: ";
for(int i = 0; i < size; i++){
cout<< arr[i] << " ";
}
return 0;
}
আউটপুট
উপরোক্ত কোডটি রান করলে নিচের আউটপুটটি জেনারেট হবে
Array before Arrangement: 2 3 4 5 5 7 9 10 Rearrangement of an array in maximum minimum form is: 10 2 9 3 7 4 5 5