2016-11-20 50 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]] 

然而,有一個處理列表反覆輸入的麻煩。我假設這是因爲程序可以根據是否更大或更小來繼續擴展列表,並且如果它運行的是具有相同值的內容,則會打破該過程。但是,我不知道如何解決它,所以有更好的方法來做到這一點,或者我必須採用不同的方式(使用min是我現在最好的選擇)?任何提示將不勝感激。

+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) 

下面是一個工作的解決方案,它非常長,可能效率低下,但它的工作原理。