ในปัญหานี้ เราได้รับอาร์เรย์ arr[] ขนาด n ซึ่งประกอบด้วยค่า n/2 คู่ และค่าคี่ n/2 งานของเราคือสร้างโปรแกรมเพื่อวาง เลขคู่ที่ดัชนีคู่ และเลขคี่ที่ดัชนีคี่
มาดูตัวอย่างเพื่อทำความเข้าใจปัญหากัน
ป้อนข้อมูล: arr[] ={5, 1, 6, 4, 3, 8}
ผลลัพธ์: arr[] ={6, 1, 5, 4, 3, 8}
แนวทางการแก้ปัญหา -
วิธีแก้ปัญหาคือข้ามอาร์เรย์แล้วค้นหาหมายเลขสิ้นสุดซึ่งไม่ได้อยู่ที่ตำแหน่งคู่และแทนที่ด้วยค่าปิดถัดไป นี่เป็นวิธีแก้ปัญหาที่มีแนวโน้มดี แต่วิธีแก้ปัญหาสามารถทำได้อย่างมีประสิทธิภาพมากขึ้นโดยใช้ดัชนีสองตัว ตัวหนึ่งสำหรับคู่และอีกตัวสำหรับคี่ หากมีองค์ประกอบที่ดัชนีคู่ซึ่งไม่เป็นคู่และองค์ประกอบคี่ที่ไม่อยู่ในดัชนีคี่ เราจะสลับพวกมันมิฉะนั้นจะเพิ่มดัชนีทั้งสองขึ้นสอง
โปรแกรมเพื่อแสดงการทำงานของโซลูชันของเรา
ตัวอย่าง
#include <iostream>
using namespace std;
void O_EReshuffle(int arr[], int n) {
int oIndex = 1;
int eIndex = 0;
for(int i = 0; i < n; ) {
while (eIndex < n && arr[eIndex] % 2 == 0)
eIndex += 2;
while (oIndex < n && arr[oIndex] % 2 == 1)
oIndex += 2;
if (eIndex < n && oIndex < n)
swap (arr[eIndex], arr[oIndex]);
else
break;
}
}
int main()
{
int arr[] = { 5, 1, 6, 4, 3, 8 };
int n = sizeof(arr) / sizeof(arr[0]);
cout << "Array before Reshuffling: ";
for(int i = 0; i < n ; i++){
cout<<arr[i]<<"\t";
}
O_EReshuffle(arr, n);
cout<<"\nArray after Reshuffling: ";
for(int i = 0; i < n ; i++){
cout<<arr[i]<<"\t";
};
return 0;
} ผลลัพธ์ -
Array before Reshuffling: 5 1 6 4 3 8 Array after Reshuffling: 4 1 6 5 8 3