使用枚举和非枚举来实现选择排序

2024-04-23 17:51:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图为选择排序创建一个函数,但在尝试使用枚举时遇到了一些问题。你知道吗

希望有人能帮我理解为什么最上面的函数可以工作,但是最下面的函数不行。谢谢!你知道吗

工作:

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

谢谢!你知道吗


Tags: 函数inforlenif排序defrange
1条回答
网友
1楼 · 发布于 2024-04-23 17:51:35
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):

相关问题 更多 >