2017-02-03 20 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 '项目比较自己? –