このページの解説は C99 をベースとしています。
以下は目次です。
配列の要素を逆の順序になるように並び替えたいとします。
以下のような配列があるとして、
int array1[] = {0, 1, 2, 3, 4};
int array2[] = {0, 1, 2, 3, 4, 5};
処理を適用後、array1 は {4, 3, 2, 1, 0} の順で、 array2 は {5, 4, 3, 2, 1, 0} の順で並ぶようにします。
要素数が、奇数の場合や偶数の場合のどちらでも正しく動作するかどうかには注意が必要です。
先頭の要素と末尾の要素とを交換することを、範囲を縮めながら繰り返します。
つまり、要素数が 5 だとすれば、 array[0] <-> array[4]、 array[1]
<-> array[3]、 array[2] <-> array[2]
で交換を行います。
要素の交換については、「逆引き 変数の値を交換する」を参照してください。
#include <stdio.h>
#define SWAP(type,x,y) do{type tmp = x; x = y; y = tmp;}while(0)
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))
void reverse(int* array, size_t size)
{
for (size_t i = 0; i < size / 2; ++i) {
(int, array[i], array[size - i - 1]);
SWAP}
}
void print_array(const int* array, size_t size)
{
for (size_t i = 0; i < size; ++i) {
("%d ", array[i]);
printf}
("\n");
printf}
int main(void)
{
int array1[] = {0, 1, 2, 3, 4};
int array2[] = {0, 1, 2, 3, 4, 5};
(array1, SIZE_OF_ARRAY(array1));
reverse(array2, SIZE_OF_ARRAY(array2));
reverse
(array1, SIZE_OF_ARRAY(array1));
print_array(array2, SIZE_OF_ARRAY(array2));
print_array}
実行結果:
4 3 2 1 0
5 4 3 2 1 0
要素数が奇数の場合、真ん中の要素については、自分自身との交換になります。 自分自身との交換は無意味ですが、 if文を追加してチェックすると、かえって無駄が大きいです。
return 0;
を削除(C言語編全体でのコードの統一)新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |