2016-11-20 49 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) 

下面是一个工作的解决方案,它非常长,可能效率低下,但它的工作原理。