使用自定义def排序python 3.6.3的列表

时间:2017-11-14 09:17:20

标签: python list sorting

我正在尝试使用我自己的def

在python中对列表进行排序

这是我的代码:

def mysort(a):

    for i in range(len(a)):
        if (a[i]<a[(i+1)]):
            a[i],a[i+1] = a[i+1],a[i]
            i=0
    return a

a = [2,3,4]

print(mysort(a))

我遇到的第一个错误是列表超出范围 当我在实时编程模式中查看列表时,我看到只有第一个项目被替换为第二个项目,而第三个项目是列表中最大的数字并不是第一个

错误之前的实时编程模式列表:

[3,4,2]

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您缺少一些组件:

1-您按相反的顺序排序 2-您必须将排序限制为len(a)-1
3-如果不符合交换合同,则必须增加索引 4-你正在改变for循环中的索引......你必须在这里使用while循环。

def mysort(a):
    idx = 0
    while idx < len(a)-1:
        if a[idx] < a[(idx+1)]:
            a[idx] ,a[idx+1] = a[idx+1], a[idx]
            idx = 0
        else:
            idx += 1
    return a

a = [2,3,4]

print(mysort(a))

测试:

a = [2,3,4]
print(mysort(a))

a = [0, 1, 4, 3, 6, 2]
print(mysort(a))

a = [6, 4, 2]
print(mysort(a))

a = [-1, -1, -1, 1]
print(mysort(a))

输出:

[4, 3, 2]
[6, 4, 3, 2, 1, 0]
[6, 4, 2]
[1, -1, -1, -1]

IDK是什么类型,但它看起来像一个冒泡排序,你在列表的最开头一次又一次地开始