2015-04-27 58 views
1

我正在嘗試做一個基本的氣泡排序並計算完成所需的通過次數和交換次數。我在基本的泡泡排序中做錯了什麼?

所以對於例如輸入:

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

@QPaysTaxes我不好,我忘了刪除它。我的問題在一兩分鐘內解決了,所以我編輯了(已解決)標籤,以避免浪費點擊我的問題。 (您標記正確的答案,直到10分鐘過去。) – ArnoldM904

回答

1

raw_input().split()的結果是字符串列表,而不是整數。你的算法是正確的 - 你按字母順序排序字符串。

快速解決方法是使用例如

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