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

จัดเรียงอาร์เรย์เป็นลำดับ น้อย-มาก-น้อยที่2-มากที่2... ใน C++

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

Input : arr[] = { 13, 34, 30, 56, 78, 3 } 
Output : { 3, 78, 13, 56, 34, 30 }
Explanation : จัดเรียงเป็น { 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 }

แนวทางแก้ปัญหา

ปัญหานี้แก้ได้ด้วยตัวแปร 2 ตัว 'x' และ 'y' ที่ชี้ไปที่สมาชิกน้อยสุดและมากสุด แต่ต้องเรียงอาร์เรย์ก่อน จากนั้นสร้างอาร์เรย์ว่างขนาดเท่าเดิมเก็บอาร์เรย์ที่จัดเรียงใหม่ วนลูปผ่านอาร์เรย์ หากตำแหน่งเป็นเลขคู่ (even index) ใส่ arr[x] และเพิ่ม x หากเป็นเลขคี่ (odd index) ใส่ arr[y] และลด y ทำจน 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]);
    
    // สร้างอาร์เรย์ใหม่เก็บอาร์เรย์ที่จัดเรียงใหม่
    int reordered_array[n];
    
    // เรียงอาร์เรย์ต้นฉบับ
    sort(arr, arr + n);
    
    // ตัวชี้ไปที่ index น้อยสุดและมากสุด
    int x = 0, y = n - 1;
    int i = 0;
    
    // วนลูปจน x มากกว่า y
    while (x <= y) {
        // ถ้า i เป็นเลขคู่ ใส่สมาชิก index x (น้อยสุด)
        if (i % 2 == 0) {
            reordered_array[i] = arr[x];
            x++;
        }
        // ถ้า i เป็นเลขคี่ ใส่สมาชิก index y (มากสุด)
        else {
            reordered_array[i] = arr[y];
            y--;
        }
        i++;
    }
    
    // พิมพ์อาร์เรย์ที่จัดเรียงใหม่
    for (int i = 0; i < n; i++)
        cout << reordered_array[i] << " ";
    
    // หรืออัปเดตอาร์เรย์เดิมได้
    // 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
  • while(x <= y) วนลูปจน x มากกว่า y
  • ถ้า i เป็นเลขคู่ (x) ใส่สมาชิก arr[x] เพิ่ม x ขึ้น 1
  • ถ้า i เป็นเลขคี่ (y) ใส่สมาชิก arr[y] ลด y ลง 1
  • สุดท้าย อาร์เรย์ที่จัดเรียงใหม่เก็บใน reordered_array[]

สรุป

ในบทความนี้ เราอภิบายวิธีจัดเรียงอาร์เรย์เป็นรูปแบบ น้อย มาก น้อยที่2 มากที่2... พร้อมโปรแกรม C++ สามารถเขียนในภาษาอื่นได้เช่น C, Java, Python หวังว่าจะเป็นประโยชน์