Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

จัดเรียงเลขคู่ที่ดัชนีคู่ และเลขคี่ที่ดัชนีคี่ใน C++

โจทย์

ได้รับอาร์เรย์ arr[] ขนาด n (n เป็นเลขคู่) ประกอบด้วย n/2 ตัวเลขคู่ และ n/2 ตัวเลขคี่ ทางเราต้อง จัดเรียงใหม่ให้เลขคู่อยู่ที่ดัชนีคู่ และเลขคี่อยู่ที่ดัชนีคี่

ตัวอย่าง

Input: arr[] = {5, 1, 6, 4, 3, 8}

Output: {6, 1, 5, 4, 3, 8} (หรือลำดับอื่นที่ถูกต้อง เช่น {4, 1, 6, 5, 8, 3})

แนวทางแก้ปัญหา (Two Pointers)

  1. กำหนด eIndex = 0 (ดัชนีคู่), oIndex = 1 (ดัชนีคี่)
  2. ขยับ eIndex ไปจนกว่าจะเจอเลขคี่ที่อยู่ดัชนีคู่
  3. ขยับ oIndex ไปจนกว่าจะเจอเลขคู่ที่อยู่ดัชนีคี่
  4. สลับกัน แล้วเพิ่มดัชนีทีละ 2
  5. ทำซ้ำจนครบ

โปรแกรมตัวอย่าง

#include <iostream>
#include <algorithm>
using namespace std;

void O_EReshuffle(int arr[], int n) {
    int oIndex = 1, 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