平素よりお世話になっております。
クイックソートのプログラミングについて質問させて頂きます。
クイックソートは、リストの先頭の要素を基準に、小さいものと大きいもの振り分ける行為を振り分け要素数が1になるまで繰り返し整列させて結合させるものだと理解しています。
ただ、それに伴うプログラムが各所わからなかったので質問させていただきます。
本は、
書名:Pythonで体験してわかるアルゴリズムとデータ構造
著者:西澤弘毅、森田光
出版日:2018年6月30日初版
出版社:近代科学社
を使っています。
Python
1def sort(A): 2 if len(A)<2: 3 return A 4 p=A[0] 5 X,Y=divide(p,A[1:]) 6 return sort(X)+[p]+sort(Y) 7 8def divide(p,A): 9 if len(A)<1: 10 return ([],[]) 11 X,Y= divede(p,A[1:]) 12 a=A[0] 13 if a<p: 14 return ([a]+X,Y) 15 else: 16 return (X,[a]+Y)
1つめの質問
上記のソースの5行目
X,Y=divide(p,A[1:])
X,Yに対して関数でアンパックというのが意味わかりません。関数からX,Yそれぞれに代入できる複数の値が出力されるのでしょうか?
2つめの質問
5行目で変数の呼び出し→9~10行目では条件を満たさな場合、11行目
X,Y= divede(p,A[1:])
に移行すると思うのですが、無限ループするのでは?と思うのですが、ここの考え方がよくわかっていないので動き方について教えてください。
3つめの質問
a=A[0]
if a<p:
return ([a]+X,Y)
else:
return (X,[a]+Y)
が何をやっているのかわかりません。
...
とあげればきりがないほど全体の流れが理解できていません。回答のほどお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/17 13:19 編集
2019/08/17 13:31