2016-11-20 6 views
1

私はソートされたPythonを使用せずに、リストソートアルゴリズムを作ろうとしています。私はこれまでこれを持っています:再帰ソートリスト関数の作業を行うには?

def order(lst): 
    if lst == [] or len(lst) == 1: 
     return lst 
    elif lst[0] < order(lst[1:])[0] or lst[0] == order(lst[1:])[0]: 
     return [lst[0]] + order(lst[1:]) 
    return order(lst[1:]) + [lst[0]] 

しかし、それは繰り返しのエントリを持つリストを扱うことができません。私はあなたが何かが大きいか小さいかに基づいてリストを展開しておくことができ、そしてそれは同じ等しい値を持っているものに実行されている場合、プログラムは、それがプロセスを破るためであると仮定しています。しかし、私はそれをまったく修正する方法がわからないので、これを行う良い方法があるのでしょうか、あるいは別の方法を使う必要がありますか?どんなヒントもありがとう。

+1

それらをあなたが実装しようとしている様々なソートアルゴリズムが....ありますか? – danidee

+0

( '<'または '==')の代わりに '<='を使用してください。 – Zety

+0

私は、数値を最小から最大まで順にソートする関数を実装しようとしています。 – raindoggo

答えて

0
def order(lst): 
    count = 0 #this is the count of how many times we've seen a repeated digit 
    def helper(lst): 
     nonlocal count 
     if len(lst) <= 1: 
      return lst 
     lst_without_min = [] 
     for x in lst: 
      if count < 1 and x == min(lst): #okay, we've already seen the minimum digit once, if it's repeated again keep it in there 
       count += 1 
      else: 
       lst_without_min.append(x) 
     return [min(lst)] + order(lst_without_min) 
    return helper(lst) 

実際には長く、おそらく非効率な解決策ですが、機能します。