使用和不使用枚举进行选择排序

时间:2016-01-07 00:58:10

标签: python algorithm sorting

我试图为选择排序创建一个函数,但在尝试使用枚举时出现了一些问题。

希望有人能帮助我理解为什么顶级功能正常工作但最底层的功能却没有。谢谢!

工作:

def selection_sort(arr):
for x in range(len(arr)):           
    current_min = [x,arr[x]]
    for i in range(x,len(arr)): 
        if arr[i] < current_min[1]:
            current_min = [i,arr[i]]
    temp = arr[x]
    arr[x] = current_min[1]
    arr[current_min[0]] = temp
print arr

不工作:

def selection_sort(arr):
for x in range(len(arr)):                   
    current_min = [x,arr[x]]        
    for i, v in enumerate(arr, x):
        if v < current_min[1]:
            current_min = [i,v]
    temp = arr[x]
    arr[x] = current_min[1]
    arr[current_min[0]] = temp
print arr

谢谢!

1 个答案:

答案 0 :(得分:0)

for i in range(x,len(arr)):
    arr[i]

将从索引x开始,一直到len(arr)-1。假设x为2且数组长度为5.有效地,您将访问元素

arr[2]
arr[3]
arr[4]

然而,

for i, v in enumerate(arr, x):
    i, v

将遍历所有元素,但索引将从x开始,因此您将获得

2, arr[0]
3, arr[1]
4, arr[2]
5, arr[3]
6, arr[4]

要解决此问题,您希望从位置x开始迭代数组,因此将上面的行更改为

for i, v in enumerate(arr[x:], x):