我已经知道最好的排序比较算法有复杂度O(nlog(n))。但是我被要求使用复杂度为O(n)的排序算法对整数数组进行排序(假设)数组中的所有元素都是非负的并且小于常数K 。但我不知道如何在排序算法中使用这些信息。你们有什么想法吗?
答案 0 :(得分:4)
这是一个简单的("counting sort"或"直方图排序","bucket sort"的堕落情况):
k
的非负整数分配一个带有一个插槽的数组,并将其归零。 O(k)
O(n)
O(n+k)
因此,O(n+k)
。
答案 1 :(得分:2)
基数排序为您提供O(n log k),而不是O(n log n)复杂度。由于K是与n无关的固定数,因此得到的复杂度为O(n * const),即e。它是线性的。
答案 2 :(得分:1)
取决于那种复杂性。平均情况O(n + k):Bucket Sort。
基数排序应该是O(m * n)。 (m是用于排序的密钥的长度)
答案 3 :(得分:1)
创建一个大小为K的新数组,然后将每个元素插入到自己位置的数组中。
假设K = 100
创建一个包含100个整数的数组 - 清除它。 如果你有集合{55,2,7,34}。 你只需要以下内容:
array[55] = 1;
array[2] = 1;
array[7] = 1;
array[34] =1;
从头到尾遍历数组,只打印== 1
的单元格索引