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

时间:2015-04-27 03:24:57

标签: python python-2.7 sorting 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吗?

1 个答案:

答案 0 :(得分:1)

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

快速解决方法是使用例如

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