このページの解説は C99 をベースとしています。
以下は目次です。
配列の中から、もっとも大きい値(またはもっとも小さい値)を探したいとします。
都合の良い前提条件がない限り、基本的に、先頭の要素から順に1つずつ調べるしかありません。 (前提条件の例として、方法②を参照してください)。
#include <assert.h>
#include <stdio.h>
#define SIZE_OF_ARRAY(array) (sizeof(array)/sizeof(array[0]))
int max_element(const int* array, size_t size)
{
(array != NULL);
assert(size >= 1);
assert
int max = array[0];
for (size_t i = 1; i < size; ++i) {
if (max < array[i]) {
= array[i];
max }
}
return max;
}
int min_element(const int* array, size_t size)
{
(array != NULL);
assert(size >= 1);
assert
int min = array[0];
for (size_t i = 1; i < size; ++i) {
if (min > array[i]) {
= array[i];
min }
}
return min;
}
int main(void)
{
const int array[] = {9, -4, 6, -2, 10, 7, -1};
("max: %d\n", max_element(array, SIZE_OF_ARRAY(array)));
printf("min: %d\n", min_element(array, SIZE_OF_ARRAY(array)));
printf}
実行結果:
max: 10
min: -4
配列の要素の値を先頭から順番に調べていき、 各段階においての最大値(最小値)を、作業用の変数に取っておきます。 より大きな値(小さな値)が現れたら、その値で更新します。
最大値(最小値)の初期値だけは注意が必要です。
何らかの適切な初期値を与えないと、array[0]
と不定値との比較になってしまい、 正しい判定が行えません。
ここでは array[0] を初期値として使い、変数i は 1
から開始するようにしています。
あるいは、INT_MIN や INT_MAX のように、これより大きい(小さい)値があり得ない値を使う方法もあります。 たとえば、次のようになります。
= INT_MIN; // 最大値の変数を、可能性のある最小の値で初期化
max for (size_t i = 0; i < size; ++i) {
if (max < array[i]) {
= array[i];
max }
}
配列がソートされているのなら、先頭要素が最小値か最大値になっているはずなので、 先頭要素を取得するだけで済みます。
そのため、配列を書き換えてしまっても良いのなら、効率面の問題もありますが、ソートしてしまうことも1つの方法ではあります。配列をソートする方法は、「逆引き 配列をソートする」で扱っているので、そちらを参照してください。
新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |