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

โปรแกรม C อัลกอริทึมการกลับด้าน (Reversal Algorithm) สำหรับการหมุนอาร์เรย์

การหมุนอาร์เรย์ (Array Rotation)

การหมุนอาร์เรย์คือการเปลี่ยนลำดับองค์ประกอบ โดยเพิ่มดัชนี (index) ของแต่ละองค์ประกอบ และย้ายองค์ประกอบสุดท้ายไปเป็นตัวแรก

ตัวอย่าง

Array[] = {3, 6, 8, 1, 4, 10}
หมุน 2 ครั้ง → Array[] = {1, 4, 10, 3, 6, 8}

อัลกอริทึมการกลับด้าน (Reversal Algorithm)

แบ่งอาร์เรย์เป็น 2 ส่วนย่อย กลับด้านแต่ละส่วน แล้วนำมารวมกันและกลับด้านอีกครั้ง

ขั้นตอน

  1. แบ่งอาร์เรย์เป็น 2 ส่วน: a1[0 ถึง d-1] และ a2[d ถึง n-1]
  2. กลับด้านทั้งสองอาร์เรย์ย่อย
  3. รวม a1 และ a2 กลับเป็นอาร์เรย์เดิม
  4. กลับด้านอาร์เรย์ที่รวมแล้ว → ได้อาร์เรย์ที่หมุนแล้ว

ตัวอย่าง

arr[] = {1, 4, 2, 8, 3, 6, 5}, d = 3, n = 7
a1[] = {1, 4, 2}        a2[] = {8, 3, 6, 5}
a1r[] = {2, 4, 1}       a2r[] = {5, 6, 3, 8}
ar[] = {2, 4, 1, 5, 6, 3, 8}  (a1r + a2r)
arr[] = {8, 3, 6, 5, 1, 4, 2}  (กลับด้าน ar) ← ผลลัพธ์

โค้ดภาษา C

#include <stdio.h>

void reverse(int arr[], int start, int end) {
    int temp;
    while (start < end) {
        temp = arr[start];
        arr[start] = arr[end];
        arr[end] = temp;
        start++;
        end--;
    }
}

int main() {
    int arr[] = {54, 67, 12, 76, 25, 16, 34};
    int n = 7;
    int d = 2;
    
    printf("The initial array is :\n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    
    reverse(arr, 0, d - 1);
    reverse(arr, d, n - 1);
    reverse(arr, 0, n - 1);
    
    printf("\nThe left reversed array by %d elements is:\n", d);
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    
    return 0;
}

ผลลัพธ์

The initial array is : 54 67 12 76 25 16 34
The left reversed array by 2 elements is: 12 76 25 16 34 54 67