2014-10-08 54 views
0

對於這個函數,出於某種原因,我得到錯誤,我無法弄清楚它有什麼問題。帶有氣泡排序功能的Python錯誤

def bubbleSort(lis): 
    for pas in lis: 
     for i in pas: 
      if lis[i] > lis[i+1]: 
       lis[i],lis[i+1] = lis[i+1],lis[i] 

我收到以下錯誤:

Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    bubbleSort(hello) 
    File "C:/Users/albert/Desktop/test.py", line 4, in bubbleSort 
    for i in pas: 
TypeError: 'int' object is not iterable 
+0

你是怎麼調用這個函數的?我的意思是你通過什麼作爲lis? – theharshest 2014-10-08 02:16:57

回答

2

假設lis是整數列表,pas將是一個整數。 for i in pas:失敗,因爲在單個整數中沒有i

冒泡排序通常用外循環,變爲而有任何的改變,及內循環,遍歷n-1指數,沒有列出的元素來完成。你可以在很多地方找到一個標準的實現,這裏的rosetta code one

def bubble_sort(seq): 
    """Inefficiently sort the mutable sequence (list) in place. 
     seq MUST BE A MUTABLE SEQUENCE. 

     As with list.sort() and random.shuffle this does NOT return 
    """ 
    changed = True 
    while changed: 
     changed = False 
     for i in xrange(len(seq) - 1): 
      if seq[i] > seq[i+1]: 
       seq[i], seq[i+1] = seq[i+1], seq[i] 
       changed = True 
    return None 
+0

嘿,我只是在中間og複製粘貼從羅塞塔的代碼,當你張貼.. :) – brunsgaard 2014-10-08 02:23:25