เราได้รับอาร์เรย์จำนวนเต็มที่มีค่าคู่และคี่ งานคือจัดเรียงอาร์เรย์ใหม่เพื่อให้: หาก 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