2017-02-03 54 views
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) 

回答

2

再次閱讀Python中的範圍;他們並沒有明確的概念 。例如,range(0, 3)大致相當於[0, 1, 2]。 它剛好停止了第二個值。切片也是如此。

+0

我讀過它,現在有意義!但是,如果是這種情況,假設我想在測試用例中遍歷這個數組A,通過它們在外部循環中進行交流,我可以只爲「我在範圍內(0,len(alist))」嗎?因爲len(alist)是8,並且它只會循環到A [7] –

+0

那麼,這將工作,因爲您的程序設置的方式。但如果我正在編寫一個選擇排序,我會在倒數第二個項目處停止外循環,並在'i + 1'處開始'j'。請注意,從零開始是默認值,所以你可以說'我在範圍內(len(alist))'。 –

+0

你想介紹一下你的想法嗎?我正在尋找某人在選擇排序上的實現,它完全按照您如何描述它的方式來實現。如果說,你停止外部循環@倒數第二個項目,那麼你不會忽略數組中的最後一個項目嗎?也是爲了在i + 1開始j,這是否意味着你想排除j '項目比較自己? –