Python中的简单选择排序

时间:2016-04-06 18:12:11

标签: python list loops

我在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?

如何让我的代码缩进,就像粘贴它后在程序中写的一样?

1 个答案:

答案 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