0
私はPythonで選択ソートを実装しましたが、inner forループのこの小さな部分を理解できませんでした。選択ソートの一部を実装する際に問題が発生しました
j
ためfor
ループ、私は外側のインデックスi
から最大長-1の範囲を持っているが、これは私に多くの意味になりますが、結果は配列の最後の数をカウントしていないだろう、と私ができますその理由を考えないでください。
ただし、範囲をi
から最大長に変更すると機能します。 (私の知識ではalist[len(alist)]
が1桁をカウントするので、配列を超えていなければなりません)。
#Go over the loop, find the smallest num
def swap(arr, num_1, num_2):
temp = arr[num_1]
arr[num_1] = arr[num_2]
arr[num_2] = temp
def selectionSort(alist):
for i in range(0, len(alist)-1):
min = i
# for j in range(i+1, len(alist)):
# Why len(alist)-1 doesn't work?
for j in range(i, len(alist)-1):
if alist[j] < alist[min]:
min = j
if min != i :
swap(alist,i,min)
return alist
# Test
print "-------------Test--- ----------"
A = [2,1,9,3,4,100,99,30]
print selectionSort(A)
私はそれを読み、それは今意味があります!しかし、これが当てはまる場合、テストケースでこの配列Aをたどって外側ループ内のすべてを介在させたいとしたら、 "for i in range(0、len(alist))"を持つことはできますか? len(alist)は8で、Aにループするだけです。[7] –
あなたのプログラムが設定されているので、うまくいくでしょう。しかし、もし私が選択ソートを書いていたら、次の最後の項目で外側のループを止め、 'i + 1'で' j'を起動します。また、ゼロから開始することがデフォルトであるので、 'for i in range(len(alist))'と言うことができます。 –
あなたの考えを精緻化してもらえますか?私は選択ソートで誰かの実装を見ていた、それはあなたがそれを記述した方法とまったく同じです。たとえば、外側のループの最後の項目を停止すると、配列の最後の項目を無視しないでしょうか?また、i + 1でjを開始すると、jをどこから除外したいのでしょうか? 'そのアイテムはそれ自身と比較されますか? –