在我的基本冒泡排序中我做错了什么?

What am I doing wrong in my basic bubble sort?

我正在尝试进行基本的冒泡排序并计算完成所需的传递和交换次数。

因此对于示例输入:

23 - 这只是下面数字的数量。不要问我为什么不能只使用 len()

20 18 8 11 17 12 13 21 10 14 9 5 19 6 16 7 2 15 1 3 22 4 23

def bubbleSort(amount, numbers):
    sorted = False
    swapCount, passCount = 0,0

    while not sorted:
        sorted = True
        for i in range(amount-1):
            if numbers[i] > numbers[i+1]:
                sorted = False
                swapCount += 1
                numbers[i], numbers[i+1] = numbers[i+1], numbers[i]
        passCount += 1
    print(numbers)
    print('%s %s') % (passCount, swapCount)

bubbleSort(input(),raw_input().split())

自然地,预期的输出将是:

19 次传球,151 次交换,名单按从小到大的正确顺序排列。 但是,我一直以 19 次传递和 109 次交换结束,我的订单看起来像这样:

['1', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '2', '20', '21', '22', '23', '3', '4', '5', '6', '7', '8', '9']

任何人都可以引导我朝着正确的方向正确排序,并且 2 不被认为大于 10

raw_input().split() 的结果是一个字符串列表,而不是整数。您的算法是正确的 - 您正在按字母顺序对字符串进行排序。

一个快速解决方法是使用例如

bubbleSort(input(), [int(x) for x in raw_input().split()])