Pythonコードにだいぶ慣れてきました。
Pythonistaの人たちが、「Pythonが使いやすいのはコードがシンプルになるから」とよく言っているのを聞くのだが、インクリメントがなかったり、for文が特殊だったりして、個人的には少し足りていない言語の印象がある。
悪く言うつもりはないが、クセのある言語には違いなさそうだ。
ソース
#coding: UTF-8
def mid(x,y,z):
if x < y:
if y < z:
return y
elif z < x:
return x
else:
return z
else:
if z < y:
return y
elif x < z:
return x
else:
return z
def quickSort(numbers , begin , end):
if end >= 0 and begin >= 0 and end - begin <= 1:
return numbers
begin = 0 if begin < 0 else begin
end = len(numbers)-1 if end <0 else end
left = begin
right = end
if begin >= end:
return numbers
pivot = mid(numbers[left] , numbers[left + int((right - left)/2)] , numbers[right])
while 1:
while numbers[left] < pivot:
left += 1
while numbers[right] > pivot:
right -= 1
if left >= right:
break
tmp = numbers[left]
numbers[left] = numbers[right]
numbers[right] = tmp
left += 1
right -= 1
numbers = quickSort(numbers , begin , left)
numbers = quickSort(numbers , right , end)
return numbers
print quickSort([10,2,12,7,16,8,13] , -1 , -1)
実行
$ python quickSort.py
[2, 7, 8, 10, 12, 13, 16]
解説
インクリメントが使えない
プログラムの醍醐味であるインクリメントが無いなんてコーダーとしては何だか物足りないんじゃないか?と思うが、下記のように対応することでいいらしい。
num++
↓
num += 1
三項演算子の書き方
JSやPHPの三項演算子は
$hoge = (fuga < 0) ? 0 : fuga;
というところを、Pythonでは、以下のように記述する
# 変数 = (if==trueの返り値) if (条件) else (if==falseの返り値)
hoge = 0 if fuga < 0 else fuga
返り値が最初に来るところが、悩ましいですね。
nullを使わずに-1を使用
Pythonだからというわけではないが、JS以外は変数の型には忠実に従ったほうがいいので、quickSort関数の第2,3引数にnullを使わずに、マイナス値を使いましたが、
これで、配列内の数値はプラスの数値しか使えなくなってしまいました。
null使ったほうが良かったのかな???
関連記事
アルゴリズム学習
0 件のコメント:
コメントを投稿