ภาพรวม
ได้รับอาร์เรย์จำนวนเต็ม arr[] มีทั้งบวกและลบ งานคือจัดเรียงใหม่ให้อิลิเมนต์ที่ตำแหน่งคู่ (Even index) มีค่าน้อยกว่าอิลิเมนต์ที่ตำแหน่งคี่ (Odd index)
ตัวอย่าง
อินพุต − int arr[] = {2, 1, 4, 3, 6, 5, 8, 7}
เอาต์พุต − Array before Arrangement: 2 1 4 3 6 5 8 7
Rearrangement of an array such that even index elements are smaller and odd index elements are greater is: 1 4 2 6 3 8 5 7
คำอธิบาย − จัดเรียงใหม่ให้ตำแหน่งคู่น้อยกว่าตำแหน่งคี่ ได้ 1 4 2 6 3 8 5 7
อินพุต − int arr[] = {10, -1, 7, -5, 6, -9}
เอาต์พุต − Array before Arrangement: 10 -1 7 -5 6 -9
Rearrangement of an array such that even index elements are smaller and odd index elements are greater is: -1 10 -5 7 -9 6
คำอธิบาย − จัดเรียงใหม่ให้ตำแหน่งคู่น้อยกว่าตำแหน่งคี่ ได้ -1 10 -5 7 -9 6
แนวทางการแก้ปัญหา
- รับอาร์เรย์ คำนวณขนาด
- พิมพ์อาร์เรย์ก่อนจัดเรียง
- เรียก
Rearrangement(arr, size) - ภายในฟังก์ชัน:
- วน i=0 ถึง size-2:
- หาก
i % 2 == 0(ตำแหน่งคู่ 0-based) และarr[i] > arr[i+1]สลับ - หาก
i % 2 != 0(ตำแหน่งคี่) และarr[i] < arr[i+1]สลับ
- หาก
- วน i=0 ถึง size-2:
- พิมพ์ผลลัพธ์
ตัวอย่างโค้ด C++
#include <iostream>
using namespace std;
void Rearrangement(int* arr, int size){
for(int i = 0; i < size - 1; i++){
if(i % 2 == 0){
if(arr[i] > arr[i + 1]){
swap(arr[i], arr[i + 1]);
}
}
if(i % 2 != 0){
if(arr[i] < arr[i + 1]){
swap(arr[i], arr[i + 1]);
}
}
}
}
int main(){
int arr[] = {2, 1, 4, 3, 6, 5, 8, 7};
int size = sizeof(arr) / sizeof(arr[0]);
cout << "Array before Arrangement: ";
for (int i = 0; i < size; i++){
cout << arr[i] << " ";
}
Rearrangement(arr, size);
cout << "\nRearrangement of an array such that even index elements are smaller and odd index elements are greater is: ";
for(int i = 0; i < size; i++){
cout << arr[i] << " ";
}
return 0;
}
ผลลัพธ์
Array before Arrangement: 2 1 4 3 6 5 8 7 Rearrangement of an array such that even index elements are smaller and odd index elements are greater is: 1 4 2 6 3 8 5 7