2017-01-29 40 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)にあります。そのような質問をするのは残念です。 – DyZ

+0

私が正しく思い出した場合、この質問は1時間前ではないと尋ねられました... –

答えて

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

まず、挿入ソートでは、最初の要素がソートされていると仮定します。 したがって、最初の要素からリスト内で反復を開始します。 第2に、 ここで範囲機能を使用しています。 あなたのコードに必要な修正は、以下のようにrange関数を使用する必要があるということです: 範囲内のインデックス(1、len(list1))の場合は (len(list1))のインデックスの代わりに returnステートメントのインデントを修正します。return文が出現すると、関数コードの実行が停止するため、forループがタスクを完了したときにのみreturnステートメントが存在する必要があります。 sort関数は以下のように要約します。

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は自分で解決し、あなた自身のためのより良いコンセプトを作成することができ、小さな問題を回避するために尋ねる前に、あなたのコードの予行演習を試してみることです。

乾杯!

関連する問題