如何才能使此快速排序实现工作? 我是C++开发人员,是新的Python。我想用python实现快速排序,下面是我的代码: from typing import Sequence, MutableSequence def find_if(list: Sequence, predicate): """Find first element of the list which predicate return true""" for i in range(len(list)): if predicate(list[i]): return i return None def find_if_not(list: Sequence, predicate): return find_if(list, lambda x : not predicate(x)) def partition(list: MutableSequence, predicate): """Reorder elements in list in such away that all element which the predicate return `true` precede the elements for which predicate returns false. Return value is index of the first element in the second group""" first = find_if_not(list, predicate) if first == None: return first for i in range(first+1, len(list)): if predicate(list[i]): list[i], list[first] = list[first], list[i] first = first + 1 return first def quick_sort(list: MutableSequence, key = lambda x : x): if len(list) <= 1: return pivot = list[0] last1 = partition(list, lambda x : x < pivot) first2 = partition(list[last1:], lambda x : x == pivot) quick_sort(list[0:last1]) if first2: quick_sort(list[first2:]) if __name__ == '__main__': arr = [6, 4, 7, 2, 8, 1, 3, 5, 2, 10, 13, 124, 1, 7] result = sorted(arr) quick_sort(arr) print("My sorted array: ", arr) print("Corrected result: ", result) 从输入导入序列,可变序列 def find_if(列表:序列,谓词): “”“查找谓词返回true的列表的第一个元素”“” 对于范围内的i(len(列表)): if谓词(列表[i]): 返回i 一无所获 def find_if_not(列表:序列,谓词): 返回find_if(列表,lambda x:not谓词(x)) def分区(列表:可变序列,谓词): “”“对列表中的元素进行重新排序,使谓词 return`true`位于谓词返回false的元素之前。return 值是第二组“”中第一个元素的索引 first=如果未找到,则查找(列表,谓词) 如果first==无: 先返回 对于范围内的i(第一个+1,len(列表)): if谓词(列表[i]): 列表[i],列表[first]=列表[first],列表[i] 第一个=第一个+1 先返回 def快速排序(列表:可变序列,键=λx:x): 如果len(list)

如何才能使此快速排序实现工作? 我是C++开发人员,是新的Python。我想用python实现快速排序,下面是我的代码: from typing import Sequence, MutableSequence def find_if(list: Sequence, predicate): """Find first element of the list which predicate return true""" for i in range(len(list)): if predicate(list[i]): return i return None def find_if_not(list: Sequence, predicate): return find_if(list, lambda x : not predicate(x)) def partition(list: MutableSequence, predicate): """Reorder elements in list in such away that all element which the predicate return `true` precede the elements for which predicate returns false. Return value is index of the first element in the second group""" first = find_if_not(list, predicate) if first == None: return first for i in range(first+1, len(list)): if predicate(list[i]): list[i], list[first] = list[first], list[i] first = first + 1 return first def quick_sort(list: MutableSequence, key = lambda x : x): if len(list) <= 1: return pivot = list[0] last1 = partition(list, lambda x : x < pivot) first2 = partition(list[last1:], lambda x : x == pivot) quick_sort(list[0:last1]) if first2: quick_sort(list[first2:]) if __name__ == '__main__': arr = [6, 4, 7, 2, 8, 1, 3, 5, 2, 10, 13, 124, 1, 7] result = sorted(arr) quick_sort(arr) print("My sorted array: ", arr) print("Corrected result: ", result) 从输入导入序列,可变序列 def find_if(列表:序列,谓词): “”“查找谓词返回true的列表的第一个元素”“” 对于范围内的i(len(列表)): if谓词(列表[i]): 返回i 一无所获 def find_if_not(列表:序列,谓词): 返回find_if(列表,lambda x:not谓词(x)) def分区(列表:可变序列,谓词): “”“对列表中的元素进行重新排序,使谓词 return`true`位于谓词返回false的元素之前。return 值是第二组“”中第一个元素的索引 first=如果未找到,则查找(列表,谓词) 如果first==无: 先返回 对于范围内的i(第一个+1,len(列表)): if谓词(列表[i]): 列表[i],列表[first]=列表[first],列表[i] 第一个=第一个+1 先返回 def快速排序(列表:可变序列,键=λx:x): 如果len(list),python,slice,quicksort,Python,Slice,Quicksort,您是正确的-列表切片(在python中称为list slicing)在原始切片处返回原始列表的副本。就快速排序而言,最简单的解决方案是简单地使用列表连接。返回排序后的列表,而不是从快速排序中返回None。然后,将左列表和右列表连接在一起,轴心位于它们之间: def quick_sort(list: MutableSequence, key = lambda x : x): if len(list) <= 1: return list ... re

您是正确的-列表切片(在python中称为list slicing)在原始切片处返回原始列表的副本。就快速排序而言,最简单的解决方案是简单地使用列表连接。返回排序后的列表,而不是从快速排序中返回
None
。然后,将左列表和右列表连接在一起,轴心位于它们之间:

def quick_sort(list: MutableSequence, key = lambda x : x):
    if len(list) <= 1:
        return list

    ...

    return quick_sort(list[:last1]) + [pivot] + quick_sort(list[first2:])
def quick_sort(列表:可变序列,键=lambda x:x):

如果LeN(list)FYI,你应该考虑接受所有你以前的问题的答案,尽可能少的努力去感谢那些正在帮助你的人……是的,切片有效地复制。不幸的是,Python没有指针,因此即使您不想传递,也可能必须将列表和索引作为参数传递。该列表将通过C++引用,因此它相当轻量级。谢谢您的帮助。可能有多个
pivot
值。如果将
[pivot]
替换为
列表[last1:first2]
会更好。这绝对是您可以进行的替换。