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

จัดเรียงอาร์เรย์ใหม่ในรูปแบบขั้นต่ำสูงสุดโดยใช้ C++


เราได้รับอาร์เรย์ที่เรียงลำดับ เราจำเป็นต้องจัดเรียงอาร์เรย์นี้ในรูปแบบสูงสุด, ต่ำสุด นั่นคือองค์ประกอบแรกคือองค์ประกอบสูงสุด องค์ประกอบที่สองคือองค์ประกอบขั้นต่ำ องค์ประกอบที่สามคือองค์ประกอบสูงสุดที่ 2 องค์ประกอบที่สี่คือองค์ประกอบขั้นต่ำที่ 2 เป็นต้น ตัวอย่างเช่น −

Input : arr[ ] = { 10, 20, 30, 40, 50, 60 }
Output : { 60, 10, 50, 20, 40, 30 }
Explanation : array is rearranged in the form { 1st max, 1st min, 2nd max, 2nd min, 3rd max, 3rd min }

Input : arr [ ] = { 15, 17, 19, 23, 36, 67, 69 }
Output : { 69, 15, 67, 17, 36, 19, 23 }

มีวิธีเดียวในการจัดเรียงอาร์เรย์ใหม่ในรูปแบบสูงสุดและต่ำสุด -

แนวทางในการหาทางออก

มีวิธีเดียวในการจัดเรียงอาร์เรย์ใหม่ในรูปแบบสูงสุดและต่ำสุด -

แนวทางสองจุด

ใช้สองตัวแปร min และ max ซึ่งจะชี้ไปที่องค์ประกอบสูงสุดและต่ำสุด และสร้างอาร์เรย์ว่างใหม่ที่มีขนาดเท่ากันเพื่อเก็บอาร์เรย์ที่จัดเรียงใหม่ ตอนนี้ วนซ้ำในอาร์เรย์ และหากองค์ประกอบการวนซ้ำอยู่ที่ดัชนีคู่ ให้เพิ่มองค์ประกอบ arr[max] ลงในอาร์เรย์ที่ว่างเปล่าและลดค่าสูงสุดทีละ 1 หากองค์ประกอบอยู่ที่ดัชนีคี่ ให้เพิ่มองค์ประกอบ arr[min] ไปที่ อาร์เรย์ว่างและเพิ่มค่าต่ำสุด 1 ทำเช่นนี้จนกว่าค่าสูงสุดจะน้อยกว่าค่าต่ำสุด

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;

int main () {
   int arr[] = { 1, 2, 3, 4, 5, 6 };
   int n = sizeof (arr) / sizeof (arr[0]);
   // creating a new array to store the rearranged array.
   int final[n];
   // pointing variables to initial and final element index.
   int min = 0, max = n - 1;
   int count = 0;
   // iterating over the array until max is less than or equals to max.
   for (int i = 0; min <= max; i++) {
      // if count is even then store max index element

      if (count % 2 == 0) {
         final[i] = arr[max];
         max--;
      }
      // store min index element
      else {
         final[i] = arr[min];
         min++;
      }
      count++;
   }
   // printing the final rearranged array.
   for (int i = 0; i < n; i++)
      cout << final[ i ] << " ";
   return 0;
}

ผลลัพธ์

6 1 5 2 4 3

คำอธิบายของโค้ดด้านบน

  • ตัวแปรเริ่มต้นเป็น min=0 และ max =array_length(n) - 1.
  • for (int i =0; min <=max; i++) เพื่อวนซ้ำในอาร์เรย์จนกว่า max จะมากกว่า min
  • หากการนับเป็นเลขคี่ ดังนั้น (สูงสุด) องค์ประกอบจะถูกเพิ่มในอาร์เรย์สุดท้าย และตัวแปร max จะลดลง 1
  • สมมติว่าการนับเป็นเลขคู่ (นาที) ในกรณีนั้น อิลิเมนต์จะถูกเพิ่มไปยังอาร์เรย์สุดท้าย และตัวแปร min จะเพิ่มขึ้น 1
  • สุดท้าย อาร์เรย์ผลลัพธ์จะถูกเก็บไว้ในอาร์เรย์สุดท้าย[ ]

บทสรุป

ในบทความนี้ เราได้พูดถึงวิธีแก้ปัญหาในการจัดเรียงอาร์เรย์ที่กำหนดใหม่เป็นรูปแบบ max-min เราได้หารือเกี่ยวกับแนวทางการแก้ปัญหาและแก้ไขด้วยวิธีแก้ปัญหาในแง่ดีโดยมีเวลาซับซ้อน O(n) เราก็เขียนโปรแกรม C++ เหมือนกัน ในทำนองเดียวกัน เราสามารถเขียนโปรแกรมนี้ในภาษาอื่นๆ เช่น C, Java, Python เป็นต้น เราหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์