Cho mảng arr[] kích thước n (n/2 số chẵn, n/2 số lẻ). Nhiệm vụ: sắp xếp số chẵn ở chỉ mục chẵn, số lẻ ở chỉ mục lẻ.
Ví dụ:
Đầu vào: arr[] = {5, 1, 6, 4, 3, 8}
Đầu ra: arr[] = {6, 1, 5, 4, 3, 8} (hoặc tương tự)
Phương pháp giải
Dùng 2 chỉ mục: eIndex (chẵn, bắt đầu 0), oIndex (lẻ, bắt đầu 1). Duyệt: tăng eIndex nếu arr[eIndex] chẵn, tăng oIndex nếu arr[oIndex] lẻ. Nếu cả hai đều sai vị trí => hoán đổi. Lặp cho đến hết.
Chương trình minh họa
Ví dụ
#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;
}
Kết quả
Array before Reshuffling: 5 1 6 4 3 8 Array after Reshuffling: 4 1 6 5 8 3