逆順配列

逆順配列とは?

配列の要素を逆の順序に並べ替える操作です。例えば、入力が 1 4 7 9 3 の場合、出力は 3 9 7 4 1 となります。

方法1:インプレースでの逆順

この方法では、追加の配列を使用せず、元の配列内で要素を直接交換します。左右から要素を交互に交換し、中心に向かって進んでいきます。

#include <stdio.h>
#define MAX_SIZE 10

void reverse_in_place(int arr[], int size) {
    int left_idx = 0;
    int right_idx = size - 1;
    int temp;

    while (left_idx < right_idx) {
        // 左右の要素を交換
        temp = arr[left_idx];
        arr[left_idx] = arr[right_idx];
        arr[right_idx] = temp;

        // インデックスを更新
        left_idx++;
        right_idx--;
    }
}

int main() {
    int num_elements;
    int arr[MAX_SIZE] = {0};

    printf("入力する要素の数を入力してください (最大 %d): ", MAX_SIZE);
    scanf("%d", &num_elements);

    printf("%d 個の整数を入力してください:
", num_elements);
    for (int i = 0; i < num_elements; i++) {
        scanf("%d", &arr[i]);
    }

    reverse_in_place(arr, num_elements);

    printf("逆順後の配列:
");
    for (int i = 0; i < num_elements; i++) {
        printf("%d ", arr[i]);
    }
    printf("
");

    return 0;
}

方法2:一時配列を使用した逆順

この方法では、元の配列の要素を新しい一時配列に逆順でコピーします。元の配列は変更されません。

#include <stdio.h>
#define MAX_SIZE 10

void reverse_with_temp(const int src_arr[], int dest_arr[], int size) {
    for (int source_idx = 0, target_idx = size - 1; source_idx < size; source_idx++, target_idx--) {
        dest_arr[source_idx] = src_arr[target_idx];
    }
}

int main() {
    int num_elements;
    int original_arr[MAX_SIZE] = {0};
    int temp_arr[MAX_SIZE] = {0};

    printf("入力する要素の数を入力してください (最大 %d): ", MAX_SIZE);
    scanf("%d", &num_elements);

    printf("%d 個の整数を入力してください:
", num_elements);
    for (int i = 0; i < num_elements; i++) {
        scanf("%d", &original_arr[i]);
    }

    reverse_with_temp(original_arr, temp_arr, num_elements);

    printf("逆順後の配列 (一時配列を使用):
");
    for (int i = 0; i < num_elements; i++) {
        printf("%d ", temp_arr[i]);
    }
    printf("
");

    return 0;
}

タグ: C言語 配列 アルゴリズム

7月20日 03:14 投稿