Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在选择排序算法中,程序未正确排序列表中的最低值_Python_Python 3.x_Algorithm_Selection Sort - Fatal编程技术网

Python 在选择排序算法中,程序未正确排序列表中的最低值

Python 在选择排序算法中,程序未正确排序列表中的最低值,python,python-3.x,algorithm,selection-sort,Python,Python 3.x,Algorithm,Selection Sort,我正在用Python编写一个程序,它实现了一个选择排序算法,并按降序对列表中的元素进行排序 假设我的输入是l=[242,18,442011111] 我的逻辑如下: l=[242,18,442011111]#开关l[0](242)和l[len(l)-1](1111) l=[1111,18,44201242]#开关l[1](18)和l[len(l)-1](242) l=[1111244420118]#开关l[2](44)和l[len(l)-2](201) 输出将是[1111、242、201、44

我正在用Python编写一个程序,它实现了一个选择排序算法,并按降序对列表中的元素进行排序

假设我的输入是
l=[242,18,442011111]

我的逻辑如下:

  • l=[242,18,442011111]#开关l[0](242)和l[len(l)-1](1111)
  • l=[1111,18,44201242]#开关l[1](18)和l[len(l)-1](242)
  • l=[1111244420118]#开关l[2](44)和l[len(l)-2](201)
输出将是
[1111、242、201、44、18]

下面是我根据上述逻辑实现的代码:

def selSort(l):
    '''Sorts the list in descending order using a selection sort algorithm.

    Params: l (list): unsorted list
    Sorts: unsorted list in descending order
    '''
    start = len(l)-1
    while start != 0:
        for i in range(len(l)):
            if l[i] < l[start]:
                l[i], l[start] = l[start], l[i]
        start -= 1
def selSort(l):
''使用选择排序算法按降序对列表进行排序。
参数:l(列表):未排序的列表
排序:按降序排列的未排序列表
'''
开始=长(l)-1
开始时!=0:
对于范围内的i(len(l)):
如果l[i]
似乎我高估了我的逻辑,因为算法的输出是
[1111,18,242,201,44]

经过一些调试,我发现经过几次遍历后,
l
已正确排序,但while循环仍然没有满足其终止条件。这意味着
start
i
之间会有一些不必要的重叠。例如,当
start=3
i=4
时,
l[i]
,导致
l=[1111、242、201、18、44]
。经过一次额外的遍历,我们得到了上面显示的错误输出

对于这个问题,什么是优雅的(我知道选择排序不是最有效的算法)和python解决方案?我试图在不使用任何内置函数(除了
len
range
之外)、方法或外部库(如果可能)的情况下实现这一点


我已经查过这里的帖子了。前者使用列表方法(我正试图避免使用列表方法),而我对java语法的理解还不足以使用后者

这应该行得通。它还使用range()来避免使用while循环

def selSort(l):
'''Sorts the list in descending order using a selection sort algorithm.

Params: l (list): unsorted list
Sorts: unsorted list in descending order
'''
for i in range(len(l)):

    # Find the largest element in list
    max_index = i
    for j in range(i + 1, len(l)):
        if l[max_index] < l[j]:
            max_index = j

    # Swap the first and max item
    l[i], l[max_index] = l[max_index], l[i]
def selSort(l):
''使用选择排序算法按降序对列表进行排序。
参数:l(列表):未排序的列表
排序:按降序排列的未排序列表
'''
对于范围内的i(len(l)):
#查找列表中最大的元素
最大指数=i
对于范围(i+1,len(l))内的j:
如果l[max_index]
这应该行得通。它还使用range()来避免使用while循环

def selSort(l):
'''Sorts the list in descending order using a selection sort algorithm.

Params: l (list): unsorted list
Sorts: unsorted list in descending order
'''
for i in range(len(l)):

    # Find the largest element in list
    max_index = i
    for j in range(i + 1, len(l)):
        if l[max_index] < l[j]:
            max_index = j

    # Swap the first and max item
    l[i], l[max_index] = l[max_index], l[i]
def selSort(l):
''使用选择排序算法按降序对列表进行排序。
参数:l(列表):未排序的列表
排序:按降序排列的未排序列表
'''
对于范围内的i(len(l)):
#查找列表中最大的元素
最大指数=i
对于范围(i+1,len(l))内的j:
如果l[max_index]
选择排序算法的逻辑(降序):在表上迭代n-1次(n是列表中的元素数)。在第i次迭代中,我们选择索引i+1和n之间的最高元素,并将该元素与列表中位置i处的元素交换。这将导致以下代码:

def selSort(l):
    '''Sorts the list in descending order using a selection sort algorithm.

    Params: l (list): unsorted list
    Sorts: unsorted list in descending order
    '''
    for i in range(len(l)-1) :
        posMax = i
        for j in range(i+1,len(l)):
            if l[j] > l[posMax]:
                posMax = j
        l[posMax], l[i] = l[i], l[posMax]
    return l

l = selSort([242, 18, 44, 201, 1111])
print(l) #prints [1111, 242, 201, 44, 18]

选择排序算法的逻辑(降序):在表上迭代n-1次(n是列表中的元素数)。在第i次迭代中,我们选择索引i+1和n之间的最高元素,并将该元素与列表中位置i处的元素交换。这将导致以下代码:

def selSort(l):
    '''Sorts the list in descending order using a selection sort algorithm.

    Params: l (list): unsorted list
    Sorts: unsorted list in descending order
    '''
    for i in range(len(l)-1) :
        posMax = i
        for j in range(i+1,len(l)):
            if l[j] > l[posMax]:
                posMax = j
        l[posMax], l[i] = l[i], l[posMax]
    return l

l = selSort([242, 18, 44, 201, 1111])
print(l) #prints [1111, 242, 201, 44, 18]