冒泡排序问题,第一个值未正确排序

Issue with Bubble Sort, First Value Not Sorted Properly

我已经为一个简单的数组设置了冒泡排序,但是有一个奇怪的问题我不明白输出中第一个值在哪里没有正确排序并且由于某些原因零没有正确排序。

此外,赋值只要求对整数列表进行排序,但是当我将字符串值插入列表时会产生错误,因为 > 运算符只能比较整数。出于好奇,是否有一个简单的修复方法,或者是否需要更强大的方法?谢谢!

我可以 "fix" 通过在函数内但在 while 循环之外添加另一个 for 循环来解决第一个数字的排序问题,但这似乎是一个低效的补丁来覆盖某种逻辑错误并且仍然存在零的问题,有人可以解释为什么会这样吗?

Y=[3, 2, 1, 9, 3, 8, 3, 0, 7]

def s_list( C ):
    length = len(C) - 1
    ordered = False   
    while not ordered:
        ordered = True
        for i in range(length):
            if int(C[i]) > int(C[i+1]):
                sorted = False
                C[i], C[i+1] = C[i+1], C[i]

    return C

预期:[0, 1, 2, 3, 3, 3, 7, 8, 9] 现实:[2, 1, 3, 3, 8, 3, 0, 7, 9]

您最初将 ordered 设置为 False,然后在 while 循环开始时设置为 True。这很好,但随后在 if 语句中将 sorted 设置为 'False'。这是两个独立的变量。将 sorted 更改为 ordered,它应该可以工作。

要么您将所有已排序的更改为有序的,要么将所有已排序的更改为已排序的,您的代码将 运行 正常