计数排序 O(n+k) 时间复杂度中的 k 是多少?

What is k in counting sort O(n+k) time complexity?

计算排序的最差、最佳和平均时间复杂度为 O(n+k),其中 n 是要排序的元素数。 k 到底是什么? 我看到了不同的定义:最大元素、最大元素和最小元素之间的差异等等。

  1. 给定数组 arr1 [1, 3, 5, 9, 12, 7 ]arr2 [1,2,3,2,1,2,4,1,3,2] arr1arr2k 是什么?
  2. 用计数排序 arr1 是不是真的很蠢 因为 n < k(元素值的范围大于 要排序的元素?

k 是键的范围,即覆盖所有可能值所需的数组槽数。因此在数字的情况下,Max-Min+1。当然,这假设您不会浪费 space 分配第一个插槽 Min 和最后一个插槽 Max

k不超过[=15=的小倍数时,使用计数排序是合适的,让n.k,因为在这种情况下,n.k可以击败n.log n.

k 是数组中的最大可能值,假设您有长度为 5 的数组,其中每个数字都是 0 到 9 之间的整数,在此示例中,k 等于 9

首先将一个包含 k 个计数的数组归零。然后读取数组中的n个元素,并根据n个元素的值递增k个计数的元素。在计数排序的输出过程中,读取 k 个计数的数组,并写入 n 个元素的数组。所以有 k 次写入(将计数归零)、n 次读取,然后是 k 次读取和 n 次写入,总共进行了 2n + 2k 次操作,但是大 O 忽略了常量 2,因此时间复杂度为 O(n + k)。