在我的基本冒泡排序中我做错了什么?
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()])
我正在尝试进行基本的冒泡排序并计算完成所需的传递和交换次数。
因此对于示例输入:
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()])