我想定义一个递归函数可以对任何一个int列表进行排序:
def sort_l(l):
if l==[]:
return []
else:
if len(l)==1:
return [l[-1]]
elif l[0]<l[1]:
return [l[0]]+sort_l(l[1:])
else:
return sort_l(l[1:])+[l[0]]
在列表[3,1,2,4,7,5,6,9,8]上调用此函数应该会给我:
[1,2,3,4,5,6,7,8,9]
但我明白了:
print(sort_l([3, 1, 2,4,7,5,6,9,8]))--> [1, 2, 4, 5, 6, 8, 9, 7, 3]
请帮我解决问题,实际代码将不胜感激。谢谢!
答案 0 :(得分:4)
quick sort是递归的,易于在Python中实现:
def quick_sort(l):
if len(l) <= 1:
return l
else:
return quick_sort([e for e in l[1:] if e <= l[0]]) + [l[0]] +\
quick_sort([e for e in l[1:] if e > l[0]])
会给:
>>> quick_sort([3, 1, 2, 4, 7, 5, 6, 9, 8])
[1, 2, 3, 4, 5, 6, 7, 8, 9]
答案 1 :(得分:1)
为此您需要使用合并排序。基本上在合并排序中,您递归地将列表拆分为一半,直到您拥有单个元素,然后以正确的顺序重新构建它。 merge sort on的复杂度为O(n log(n))
,是一种非常稳定的排序方法。
以下是合并排序的一些很好的深度解释和视觉效果:
答案 2 :(得分:0)
def quicksort(lst):
"Quicksort over a list-like sequence"
if len(lst) == 0:
return lst
pivot = lst[0]
pivots = [x for x in lst if x == pivot]
small = quicksort([x for x in lst if x < pivot])
large = quicksort([x for x in lst if x > pivot])
return small + pivots + large
上面是一个更易读的快速排序算法的递归实现。上面的代码来自O&#RE;翻译的python中的函数编程 以上功能将产生。
list=[9,8,7,6,5,4]
quicksort(list)
>>[4,5,6,7,8,9]
答案 3 :(得分:0)
def sort(array, index = 0, bigNumber = 0):
if len(array) == index:
return array
elif bigNumber > array[index]:
array[index - 1] = array[index]
array[index] = bigNumber
bigNumber = array[0]
index = 0
else:
bigNumber = array[index]
return sort(array, (index + 1), bigNumber)