【发布时间】:2015-10-29 02:51:45
【问题描述】:
桶排序是一种线性时间排序。
为什么我们在其中使用插入排序?我们知道插入排序需要 O(n2) 时间。 为什么我们不能在其中使用任何线性排序? 如我们所见,当在每个桶中我们使用插入排序 O(n2)。桶排序的总复杂度 O(n) 是多少? 为什么我们不使用 O(nlogn) 排序,例如归并排序或快速排序?
【问题讨论】:
标签: algorithm sorting insertion-sort bucket-sort
桶排序是一种线性时间排序。
为什么我们在其中使用插入排序?我们知道插入排序需要 O(n2) 时间。 为什么我们不能在其中使用任何线性排序? 如我们所见,当在每个桶中我们使用插入排序 O(n2)。桶排序的总复杂度 O(n) 是多少? 为什么我们不使用 O(nlogn) 排序,例如归并排序或快速排序?
【问题讨论】:
标签: algorithm sorting insertion-sort bucket-sort
在桶中插入排序的桶排序仅在我们可以预期每个桶中只有少数项目时才合理。当只有少数项目时,插入排序很好。
在现实生活中,这种情况并不常见。通常是当我们期望数据均匀分布时,因为我们正在按照哈希顺序或类似的方式进行排序。
桶排序最常用于整个排序 - 即桶根本不需要排序,您只需将每个项目附加到桶列表中即可。
有时我们会进行自上而下的基数排序,这就像桶排序,然后对每个桶进行桶排序。结合保留非空桶的位掩码,当排序键是 32 位整数时,这可能是一种非常快速的排序方式。
您还可以通过在不同的位范围上重复进行桶排序,并将项目附加到每个桶来进行自下而上的基数排序。这种桶排序是稳定的,所以当你按高位进行桶排序时,平局会被之前的排序打破,你是通过低位排序得到的。
【讨论】:
插入排序需要 O(n2) 时间。
这还不是全部。对于部分排序的数组,插入排序表现良好,具有线性时间复杂度。
每个条目距离其最终位置不远的数组是部分排序数组的典型示例。桶排序就是这种情况。
【讨论】: