使用复杂度为O(n)的算法对整数数组进行排序

时间:2014-12-07 20:39:43

标签: c arrays sorting

我已经知道最好的排序比较算法有复杂度O(nlog(n))。但是我被要求使用复杂度为O(n)的排序算法对整数数组进行排序(假设)数组中的所有元素都是非负的并且小于常数K 。但我不知道如何在排序算法中使用这些信息。你们有什么想法吗?

4 个答案:

答案 0 :(得分:4)

这是一个简单的("counting sort"或"直方图排序","bucket sort"的堕落情况):

  1. 为每个小于k的非负整数分配一个带有一个插槽的数组,并将其归零。 O(k)
  2. 迭代输入的所有元素并在数组中计算它们。 O(n)
  3. 迭代我们的数组并按顺序写出元素。 O(n+k)
  4. 因此,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

的单元格索引