逆順配列とは?
配列の要素を逆の順序に並べ替える操作です。例えば、入力が 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;
}