我在Python中看到了以下用于选择排序算法的代码,我的问题更多的是关于python的功能而不是算法。
def Selectionsort(A):
for i in range (0,len(A)-1):
minIndex=i
for j in range (i+1,len(A)):
if A[j]<A[minIndex]:
minIndex=j
if minIndex !=i:
A[i],A[minIndex]=A[minIndex],A[i]
A=[10,7,6,4,5,3,1,8,2,9]:
Selectionsort(A)
print(A)
我的问题是为什么在应用Selectionsort(A)之后,新A是否等于原始A但是按排序顺序?为什么Print(A)不返回原始A?
如何让我的代码缩进,就像粘贴它后在程序中写的一样?
答案 0 :(得分:0)
当我看到用实际编程语言编写的代码就好像它是Pascal-pseudocode无意义时,我感觉很糟糕,所以这里是如果使用Python编码约定编写的,这个代码的原始概念会是这样的:
def selection_sort(unsorted):
for i in range(len(unsorted) - 1):
min_index = i
for j in range(i + 1, len(unsorted)):
if unsorted[j] < unsorted[min_index]:
min_index = j
# You don't really need this if, if you don't check
# for this condition, the swap is going to be a noop
if min_index != i:
# This line swaps two elements of `unsroted' list
# by destructively modifying it
unsorted[i], unsorted[min_index] = unsorted[min_index], unsorted[i]
print unsorted
return unsorted
尽管如此,这是非惯用的Python,类似Python的代码会是这样的:
def selection_sort(unsorted):
for i in range(len(unsorted) - 1):
idx = min(enumerate(unsorted[i:]), key=lambda x: x[1])[0]
unsorted[i], unsorted[i + idx] = unsorted[i + idx], unsorted[i]
return unsorted