递归选择排序以返回python

时间:2016-05-04 18:10:29

标签: python sorting python-3.x recursion

我一直在解决问题,通过递归方法按降序对元素进行排序,代码如下。

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]

而我似乎无法确定问题所在,以及为什么我不能获得所需的输出?

2 个答案:

答案 0 :(得分: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:])不会工作

答案 1 :(得分:0)

Python的切片不是对基础列表的真正引用。请参阅:Can I create a "view" on a Python list?