使用Min和Max Python从两端进行选择排序

2024-04-23 12:15:42 发布

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

我需要实现一种方法,通过使用最小值和最大值从两端工作,使选择排序更有效。在

我有它的工作只是使用从最小值的索引,但我仍然需要找到一种方法,同时从最大值反向工作

def selectionsort(alist):

    for i in range(len(alist)): 

        min_idx = i 
        for j in range(i+1, len(alist)): 
            if alist[min_idx] > alist[j]: 
                min_idx = j 

        temp = alist[i]
        alist[i] = alist[min_idx]
        alist[min_idx] = temp

alist = [54,26,93,17,77,31,44,55,20]
selectionsort(alist)
print(alist)

函数应返回已排序的列表:[17,20,26,31,44,54,55,77,93]


Tags: 方法函数inforlenif排序def
1条回答
网友
1楼 · 发布于 2024-04-23 12:15:42

同时跟踪最大值,并将其复制到列表的末尾-就像处理最小值一样。在

def selection_sort(l):
    i = 0
    j = len(l) - 1
    while i < j:
        min_idx = i
        max_idx = i
        max_val = l[i]
        for k in range(i, j+1):
            if l[min_idx] > l[k]:
                min_idx = k
            if l[max_idx] < l[k]:
                max_idx = k
                max_val = l[k]

        l[i], l[min_idx] = l[min_idx], l[i]

        # Edge-case: if we shifted the value to the maximum in the last swap
        if l[min_idx] == max_val:
            l[j], l[min_idx] = l[min_idx], l[j]
        else:
            l[j], l[max_idx] = l[max_idx], l[j]

        i += 1
        j -= 1

    return l


my_list = [54, 26, 93, 17, 77, 31, 44, 55, 20]
my_list = selection_sort(my_list)
print(my_list)

相关问题 更多 >