2017-01-29 9 views
0

私は、組み込み関数を使用せずに単純な選択ソートプログラムをPythonで作成しようとしています。今私の問題は、私のコードはリストの最初の数字だけをソートすることです。どうしましたか?選択ソートの問題

はここでここで私は

def swap(index1,index2,list1): 
     TheList = list1 
     temp = TheList[index1] 
     TheList[index1] = TheList[index2] 
     TheList[index2] = temp 
     return(TheList) 
    def minimum(list1): 
     small = list1[0] 
     for i in list1: 
      if i < small: 
      small = i 
     return small 

出力 一覧= [3,2,1,0]

の例を使用しています最小とスワップ機能だ私のソート

def selectionsort(list1): 
    for x in range(len(list1)): 
     tiniest = minimum(list1) 
     swap(tiniest,x,list1) 
    return(list1) 

です

出力= [0,2,1,3]

+1

あなたはそれが唯一の最初の数字をソートだとはどういう意味ですか?あなたは入力例、予想された出力、実際の出力を与えることができますか? –

+1

これは* selection sort *、afaik、* bubble sort *のようには見えません。 –

答えて

1
いくつかの簡素化が分かりやすい/読みやすくなります

def swap(lst, i1, i2): 
    lst[i1], lst[i2] = lst[i2], lst[i1] # easy-swapping by multi assignment 

def minimum(lst, s): # s: start index 
    min_val, min_index = lst[s], s 
    for i in range(s+1, len(lst)): 
    if lst[i] < min_val: 
     min_val, min_index = lst[i], i 
    return min_index # return index of minimum, not minimum itself 

def selection_sort(lst): 
    for i in range(len(lst)): 
    swap(lst, i, minimum(lst, i)) 
    # find min index starting from current and swap with current 
0

と思われます。minimumはvalを返します最小要素のueはlist1ですが、swapでは代わりにインデックスが必要です。 minimumが最小の要素の値の代わりにインデックスを返すようにしてください。