เราได้รับอาร์เรย์ เราจำเป็นต้องจัดเรียงอาร์เรย์นี้โดยให้องค์ประกอบแรกควรเป็นองค์ประกอบขั้นต่ำ องค์ประกอบที่สองควรเป็นองค์ประกอบสูงสุด องค์ประกอบที่สามควรเป็นองค์ประกอบขั้นต่ำที่ 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 เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์