我正在尝试编写一个相当快的快速排序,但这在许多其他应用程序中都有使用。
内置的 filter(function, iterable) 函数返回 iterable 中的项目列表,当传递给函数时返回 true,当您只需要检查一个条件时,它比传统的 for 循环快得多列表。
我正在寻找的是一个非常快速的函数(如过滤器),它不仅会构建一个新列表,而且会删除它从旧列表中获取的项目。在单轴快速排序的应用中,这将允许删除过滤语句并可能将分区例程的速度提高近 2 倍。
python有内置这样的函数吗? numpy 怎么样?如果没有,最快的实现方式是什么?
作为引用,这里是当前的分区代码:
def partition(u):
lesser = singleQuicksort(filter(lambda num: num <= u[0], u[1:]))
greater = singleQuicksort(filter(lambda num: num > u[0], u[1:]))
return lesser, greater
请您参考如下方法:
使用 bool 掩码:
def partition(u):
mask = u[1:] <= u[0]
return u[1:][mask], u[1:][~mask]
