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