在Python3.6中从头开始编写排序算法

时间:2017-01-25 00:23:48

标签: algorithm python-3.x sorting

我正在尝试为我的家庭工作创建一个原始的排序算法,但我不能让它工作,我不明白为什么。

Parent root = FXMLLoader.load(getClass().getResource("/sample.fxml"));

我知道我不应该在程序中使用打印功能,但我希望它简洁和打包。所以这是我得到的输出:

def sa(x):
    print(x)
    i = 0
    s_array = []

    while x:
        for x[i] in x:
            if x[i] == min(x):
                s_array.append(x.pop(i))
                i = 0
            elif x[i] == max(x):
                s_array.append(x.pop(i))
                i = 0
            else:
                i += 1

    print(s_array)

我有这样的代码:

>>> sa([89, 23, 33, 45, 10, 12, 45, 45, 45])
[89, 23, 33, 45, 10, 12, 45, 45, 45]
[89, 45, 45, 45, 45, 45, 45, 45, 12]

但是把它作为输出并认为我必须添加max()elif:

def sa(x):
    print(x)
    i = 0
    s_array = []

    while x:
        for x[i] in x:
            if x[i] == min(x):
                s_array.append(x.pop(i))
                i = 0
            else:
                i += 1

print(s_array)

请帮忙。

1 个答案:

答案 0 :(得分:0)

你的for循环的编写方式你根据迭代x[i]中的元素分配 x,请考虑一下:

i = 0
x = ["a","b","c","d","e"]

for x[i] in x:
    print(x)

这将显示以下内容:

['a', 'b', 'c', 'd', 'e']
['b', 'b', 'c', 'd', 'e']
['c', 'b', 'c', 'd', 'e']
['d', 'b', 'c', 'd', 'e']
['e', 'b', 'c', 'd', 'e']

请注意,当列表被迭代时,第一个元素x[0]正在更改为列表的每个元素,并且当i更改时,它基本上将列表中的元素混合在一个可预测但很少有用的方式。相反,因为您只想循环,而列表中仍有元素,只需删除内部for循环:

while x:
    if x[i] == min(x):
        s_array.append(x.pop(i))
        i = 0
    else:
        i += 1