我一直在解决一个问题,通过递归的方法对元素进行降序排序,代码如下。
import operator
def do_stuff(elem_list):
if not elem_list:
return None
max_index , max_element = max(enumerate(elem_list) , key = operator.itemgetter(1))
elem_list[max_index],elem_list[0] = elem_list[0],elem_list[max_index]
return do_stuff(elem_list[1:])
p_list = [4,2,3,5,1]
do_stuff(p_list)
print(p_list)
输出 -
[5, 2, 3, 4, 1]
我似乎无法弄清楚问题出在哪里以及为什么我得不到所需的输出?
我能够通过添加额外参数来解决您的问题,因为您似乎正在使用 insertion sort 的递归实现,您需要某种方法来跟踪列表中交换值的下一个开放位置。
import operator
def sortl(l, last):
# base case
if last + 1 >= len(l):
return l
# find the max index (mi) and max value in the list
mi, _ = max(enumerate(l[last:]), key = operator.itemgetter(1))
mi += last # caculate the offset in the sublist
l[mi], l[last] = l[last], l[mi] # swap the values
# recursive call
return sortl(l, last + 1)
通过每次使用“last + 1”,您可以模拟使用底层子列表,因为调用 do_stuff([some_list[1:]) 不起作用
我是一名优秀的程序员,十分优秀!