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

จัดเรียงอาร์เรย์เงื่อนไข arr[i] >= arr[j] หาก i คู่ และ arr[i] <= arr[j] หาก i คี่ และ j < i ใน C++


เราได้รับอาร์เรย์จำนวนเต็มที่มีค่าคู่และคี่ งานคือจัดเรียงอาร์เรย์ใหม่เพื่อให้: หาก index i เป็นเลขคู่ → arr[i] >= arr[j] สำหรับ j < i; หาก index i เป็นเลขคี่ → arr[i] <= arr[j] สำหรับ j < i

ตัวอย่างการทำงาน (Input/Output)

ตัวอย่างที่ 1

Input: int arr[] = {5, 9, 10, 12, 32, 35, 67, 89}

Output: Array after rearranging elements are: 12 32 10 35 9 67 5 89

คำอธิบาย: จัดเรียงโดย index คู่ (0,2,4,6) ใส่ค่ามากไปน้อย; index คี่ (1,3,5,7) ใส่ค่าน้อยไปมาก

ตัวอย่างที่ 2

Input: int arr[] = {4, 5, 1, 2, 9, 10}

Output: Array after rearranging elements are: 4 5 2 9 1 10

คำอธิบาย: เรียงอาร์เรย์ทั้งหมด แล้วจัด index คู่จากค่ากลางขึ้นไป index คี่จากค่ากลางลงมา

อัลกอริทึมที่ใช้

  • ประกาศอาร์เรย์ คำนวณขนาด เรียก array_rearrange(arr, size)
  • ภายในฟังก์ชัน:
    • even = size/2, odd = size - even, temp = odd - 1
    • คัดลอกอาร์เรย์ไป arr_2[] แล้ว sort(arr_2)
    • วน i = 0,2,4... (index คู่): arr[i] = arr_2[temp--] (เอาค่ามากก่อน)
    • temp = odd วน i = 1,3,5... (index คี่): arr[i] = arr_2[temp++] (เอาค่าน้อยก่อน)
    • พิมพ์ผลลัพธ์

ตัวอย่างโค้ด C++

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

void array_rearrange(int arr[], int size) {
    int even = size / 2;
    int odd = size - even;
    int temp = odd - 1;
    int arr_2[size];
    for (int i = 0; i < size; i++) {
        arr_2[i] = arr[i];
    }
    sort(arr_2, arr_2 + size);
    for (int i = 0; i < size; i += 2) {
        arr[i] = arr_2[temp];
        temp--;
    }
    temp = odd;
    for (int i = 1; i < size; i += 2) {
        arr[i] = arr_2[temp];
        temp++;
    }
    cout << "Array after rearranging elements are: ";
    for (int i = 0; i < size; i++) {
        cout << arr[i] << " ";
    }
}

int main() {
    int arr[] = {5, 9, 10, 12, 32, 35, 67, 89};
    int size = sizeof(arr) / sizeof(arr[0]);
    array_rearrange(arr, size);
    return 0;
}

ผลลัพธ์

การรันโค้ดข้างต้นจะได้ผลลัพธ์ดังนี้:

Array after rearranging elements are: 12 32 10 35 9 67 5 89