เราได้รับอาร์เรย์ เราจำเป็นต้องจัดเรียงอาร์เรย์นี้โดยให้องค์ประกอบแรกควรเป็นองค์ประกอบขั้นต่ำ องค์ประกอบที่สองควรเป็นองค์ประกอบสูงสุด องค์ประกอบที่สามควรเป็นองค์ประกอบขั้นต่ำที่ 2 องค์ประกอบที่สี่ควรเป็นองค์ประกอบสูงสุดที่ 2 เป็นต้น ตัวอย่าง −
Input : arr[ ] = { 13, 34, 30, 56, 78, 3 }
Output : { 3, 78, 13, 56, 34, 30 }
Explanation : array is rearranged in the order { 1st min, 1st max, 2nd min, 2nd max, 3rd min, 3rd max }
Input : arr [ ] = { 2, 4, 6, 8, 11, 13, 15 }
Output : { 2, 15, 4, 13, 6, 11, 8 } แนวทางในการหาทางออก
ปัญหานี้สามารถแก้ไขได้โดยใช้สองตัวแปร 'x 's และ 'y ' โดยจะชี้ไปที่องค์ประกอบสูงสุดและต่ำสุด แต่สำหรับอาร์เรย์นั้นควรจัดเรียง ดังนั้นเราต้องเรียงลำดับอาร์เรย์ก่อน จากนั้นจึงสร้างอาร์เรย์ว่างใหม่ที่มีขนาดเท่ากันเพื่อจัดเก็บอาร์เรย์ที่จัดลำดับใหม่ ตอนนี้ วนซ้ำในอาร์เรย์ และหากองค์ประกอบการวนซ้ำอยู่ที่ดัชนีคู่ ให้เพิ่มองค์ประกอบ arr[ x ] ให้กับอาร์เรย์ว่างและเพิ่ม x ขึ้น 1 หากองค์ประกอบนั้นอยู่ที่ดัชนีคี่ ให้เพิ่มองค์ประกอบ arr[ y ] ไปที่ อาร์เรย์ว่างและลดค่า y ลง 1 ทำเช่นนี้จนกว่า 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]);
// creating a new array to store the rearranged array.
int reordered_array[n];
// sorting the original array
sort(arr, arr + n);
// pointing variables to minimum and maximum element index.
int x = 0, y = n - 1;
int i = 0;
// iterating over the array until max is less than or equals to max.
while (x <= y) {
// if i is even then store max index element
if (i % 2 == 0) {
reordered_array[i] = arr[x];
x++;
}
// store min index element
else {
reordered_array[i] = arr[y];
y--;
}
i++;
}
// printing the reordered array.
for (int i = 0; i < n; i++)
cout << reordered_array[i] << " ";
// or we can update the original array
// 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 .
- ในขณะที่ ( x<=y) สำรวจอาร์เรย์จนกระทั่ง x มากกว่า y
- ถ้าการนับเป็นคู่ (x) องค์ประกอบจะถูกเพิ่มไปยังอาร์เรย์สุดท้าย และตัวแปร x จะเพิ่มขึ้น 1
- ถ้าฉันเป็นเลขคี่ ดังนั้น (y) องค์ประกอบจะถูกเพิ่มในอาร์เรย์สุดท้าย และตัวแปร y จะลดลง 1
- สุดท้าย อาร์เรย์ที่จัดลำดับใหม่จะถูกจัดเก็บไว้ใน reordered_array[ ]
บทสรุป
ในบทความนี้ เราได้พูดถึงวิธีแก้ปัญหาเพื่อจัดเรียงอาร์เรย์ใหม่ให้อยู่ในรูปแบบที่เล็กที่สุดและใหญ่ที่สุด เราก็เขียนโปรแกรม C++ เหมือนกัน ในทำนองเดียวกัน เราสามารถเขียนโปรแกรมนี้ในภาษาอื่นๆ เช่น C, Java, Python เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์