ในปัญหานี้ เราได้รับอาร์เรย์ 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