Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จัดเรียงอาร์เรย์ใหม่ตามลำดับ – เล็กที่สุด ใหญ่ที่สุด เล็กที่สุดอันดับ 2 ใหญ่ที่สุดอันดับ 2 การใช้ C++


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