0
我已經在python中實現了選擇排序,但無法理解inner for循環的這個小部分。實現部分選擇排序的麻煩
的for
迴路j
,我從外側索引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,通過它們在外部循環中進行交流,我可以只爲「我在範圍內(0,len(alist))」嗎?因爲len(alist)是8,並且它只會循環到A [7] –
那麼,這將工作,因爲您的程序設置的方式。但如果我正在編寫一個選擇排序,我會在倒數第二個項目處停止外循環,並在'i + 1'處開始'j'。請注意,從零開始是默認值,所以你可以說'我在範圍內(len(alist))'。 –
你想介紹一下你的想法嗎?我正在尋找某人在選擇排序上的實現,它完全按照您如何描述它的方式來實現。如果說,你停止外部循環@倒數第二個項目,那麼你不會忽略數組中的最後一個項目嗎?也是爲了在i + 1開始j,這是否意味着你想排除j '項目比較自己? –