【问题标题】:insertion sort in numpy?numpy中的插入排序?
【发布时间】:2011-07-07 18:11:54
【问题描述】:

numpy 中是否有插入排序?我的数组需要一个 argsort,但内置的快速、合并和堆不适合几乎排序的数组。

【问题讨论】:

  • 您能解释一下为什么标准排序方法“不适合”吗?
  • @JoshAdel These animations 很好地展示了可用的算法快速排序、合并排序、堆排序都比插入排序具有更高的复杂度。
  • 我现在给出了肯定的答案。你愿意接受吗?

标签: python numpy sorting scipy insertion-sort


【解决方案1】:

来自numpy 1.17.0 release notes

Timsort 已经实现,现在用来代替mergesort。 [...] Timsort 改进了对已排序或​​几乎排序的数据的性能,并在随机数据上执行类似于合并排序。

截至撰写本文时,NumPy 1.17.0 尚未发布,但当发布时,您将能够通过在 sort 调用中指定 kind='stable'kind='mergesort' 来选择 Timsort:

sorted = numpy.sort(unsorted, kind='stable')

这满足了您想要使用插入排序的“快速处理近乎排序的数据”角色,同时还利用了输入中的其他顺序,并且比插入排序具有更好的最坏情况行为。

早期的 numpy 版本 do not have a fast method for nearly sorted data.

【讨论】:

  • 感谢@user2357112 改进了我的回答。
【解决方案2】:

【讨论】:

  • 我认为searchsorted 需要一个完全排序的列表,而不仅仅是“接近排序”。
  • @shang:当然 JoshAdel 的意思是可以通过在递增子集上迭代调用这两种方法来实现插入排序。
猜你喜欢
  • 2020-12-20
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多