はじめに
いつもSwiftの投稿をしていますが、アルゴリズムの投稿も今後はしていきたいと思います。
今回は合計値、平均値、最大値最小値、データ交換のアルゴリズムをSwiftで書いてみたいと思います。
また、Swiftには最大値、最小値などを求める便利な関数が用意されていますが、今回はそれらを使わずにアルゴリズムの基礎として、考えていきたいと思います。
合計値
配列の全ての要素の合計した値を求めます。
要素の一つ一つにアクセスしてそれらを都度合計値sumに足していくイメージです。
let nums = [1, 4, 3, 8, 5]
var sum = 0
for n in 0..<nums.count {
sum += nums[n]
}
print("合計:", sum) // 21
以下のような別解も考えられます。
let nums = [1, 4, 3, 8, 5]
var sum = 0
for num in nums {
sum += num
}
print("合計:", sum) // 21
平均値
合計値をデータの個数で割ったものが平均値になります。
一点注意点として、Swiftでは型推論というものがあります。sumはInt型になっており、array.countももちろんInt型になっています。これらを単純に割り算してしまうと求める答えもInt型になってしまいます。これでは少数点が正しく出力されてくれません。なので、型変換をして少数を扱える方にしてあげる必要があります。sumもarray.countもFloat型にしてあげましょう。
let nums = [1, 4, 3, 8, 5]
var sum = 0
for n in 0..<nums.count {
sum += array[n]
}
let average = Float(sum) / Float(nums.count)
print("平均:", average)
最大値と最小値
最大値も最小値もやっていることは同じなので、今回は最大値を求めるアルゴリズムを紹介します。
max変数を用意して、データ一つ一つとその変数を比較し、用意した変数より大きければmax変数を更新して更新した値を以降の比較に用いるイメージです。データを全て確認した時点でmax変数に入っている値がそのデータの最大値になります。このように、全てのデータを確認し、もし条件に一致したら何かしらの処理をするというときはfor文の中にif文を書きます。
let nums = [12, 1, 14, 19, 10, 3]
var max = nums[0]
for n in 0..<nums.count {
if max < nums[n] {
max = nums[n]
}
}
print("最大値:", max) // 19
データの交換
単純に二つのデータを入れ替えるときはそのデータが入った変数と仮の変数を一つ用意します。理由は二つしかない場合は一方を入れ替えるともう一方に入れるはずのデータが既に上書きされてしまうためです。
var a = 1
var b = 2
var t = 0
t = a
a = b
b = t
print("a:", a) // 2
print("b:", b) // 1
おわりに
今後はアルゴリズムの投稿も増やしていきたいと思います。
次回は探索アルゴリズムを紹介したいと思います。