2017-01-29 35 views
-2

我想在沒有內置函數的python中創建一個插入排序程序。唯一的問題是我的程序只會對列表中的第一項進行排序。我究竟做錯了什麼?插入排序沒有內置函數

我的排序

 def insertionsort(list1): 
     for index in range(len(list1)): 
      value = list1[index] 
      position = index 
      while position > 0 and list1[position-1] > value: 
       list1[position]=list1[position-1] 
       position = position-1 
      list1[position] = value 
      return(list1) 

示例輸出

列表= [3,1,5,2]

輸出= [1,3,5,2]

+1

插入排序示例可以在幾乎任何Python文本書中找到(例如,在Liang中)。在SO上提出這樣的問題是一種恥辱。 – DyZ

+0

如果我沒有記錯,這個問題在一個小時以前就被問到了...... –

回答

1

修復您的縮進如: (退回應該在循環之外)

def insertionsort(list1): 
    for index in range(len(list1)): 
    value = list1[index] 
    position = index 
    while position > 0 and list1[position-1] > value: 
     list1[position]=list1[position-1] 
     position = position-1 
    list1[position] = value 
    return(list1) 


aList = [3, 1, 5, 2] 

aList = insertionsort (aList) 
print (aList) 

事實上,你可以找到這個任何地方:

https://interactivepython.org/runestone/static/pythonds/SortSearch/TheInsertionSort.html

+0

另外,你可以刪除'return',因爲這樣做就地排序。 – schwobaseggl

+0

對。但是,它會完全像在鏈接(除了var名稱)... –

+0

不要羞恥在那;)你引用的來源。 – schwobaseggl

0

試試這段代碼:

def insertionSort(alist): 
    for index in range(1,len(alist)): 

    currentvalue = alist[index] 
    position = index 

    while position>0 and alist[position-1]>currentvalue: 
     alist[position]=alist[position-1] 
     position = position-1 

    alist[position]=currentvalue 


alist = [3,1,5,2] 
insertionSort(alist) 
print(alist) 

我希望它能幫助。

+0

這是不正確的...... –

1

首先在插入排序中,我們假設我們的第一個元素是排序的。因此,我們從第一個元素開始在列表中迭代。 其次, 您在此處使用範圍函數。 範圍(4)將包括從0-3開始的數字,並且將排除4. 因此,您的代碼需要的更正是您需要使用以下方式的範圍函數: (1,len(list1))中的索引而不是索引在範圍內(len(list1)) 並更正您的return語句的縮進。返回語句應僅在for循環完成其任務時存在,因爲一旦遇到返回,函數代碼執行就會停止。 排序功能總結如下。

def insertionsort(list1): 
    for index in range(1,len(list1)): 
     value = list1[index] 
     position = index 
     while position > 0 and list1[position-1] > value: 
      list1[position]=list1[position-1] 
      position = position-1 
     list1[position] = value 
    return(list1) 

另一個建議是要求help.It之前嘗試你的代碼的空運行避免了就可以解決你自己的,併爲自己創造一個更好的概念小問題。

乾杯.. !!