選択ソートのpython辺は、単純にPHPコードのローカライズ処理を行なってみました。
少し手こずった点としては、for文がC言語のようなfrom-toでインクリメントを使う書き方がどうやらpythonには無いため、
for i in range(%from% , %to%):
という書き方で行うという事を学習できた。
%from%部分を省くと、0 - nのloop処理になる。
あまりにもデフォルトの仕様なのだが、多言語と違う仕様は毎回ど忘れしてしまう。
ソースコード
#coding: UTF-8
def selectSort(numbers):
# 数値配列を最初から順番に評価していく
for i in range(0 , len(numbers)-1):
# 最小値の格納変数(最初は評価対象数値を入れておく)
min = numbers[i]
# 入れ替え対象番号用変数
num = i
# 評価番以降の一番低い数値を取得
for j in range(num+1 , len(numbers)):
if min > numbers[j]:
num = j
min = numbers[j]
# 評価番号と入れ替え番号が同じ場合は入れ替えなしとして処理無し
if num == i:
continue
# 評価番号と入れ替え番号の値を入れ替える
numbers[num] = numbers[i]
numbers[i] = min
return numbers
res = selectSort([10,2,12,7,16,8,13])
print res
実行
$ python selectSort.py
[2, 7, 8, 10, 12, 13, 16]
幾つかのエラーを乗り越えて無事に成功しました。
毎回配列に使っている数値群は、確実に入れ替えが出来ていることが確認できるように、大小をバラしてあり、毎回同じものを使うのは、結果と途中経過がデバッグして確認しやすくするためのテスト処理のためです。
本編には書いていないんですが、その内にテスト検証コーディングのテーマを設けて書きたいと思ってます。
エラー対応
そして、python言語の実行時に一つだけ、ややこしかったエラーとして、
IndentationError: expected an indented block
という内容で、インデント処理が正確にできていないとこのエラーが発生します。
if **:の次の行にインクリメントが無い状態だったんですが、多言語でよくある
if(false){}
というアホみたいな書き方をpythonでは、そのまま書けないという事がよくわかった。
無理やり書こうとは思わないのだが、まだこの感覚が養っていない言語なので、今後書き方見つけたいと思います。
関連リンク
いろいろなプログラム言語でアルゴリズム学習
0 件のコメント:
コメントを投稿