在线性时间和恒定空间中排序前n个整数

时间:2010-10-20 15:10:07

标签: algorithm sorting

我正在寻找一种非比较或基于比较的算法,该算法可以对包含前n个正整数的任何排列的数组进行排序,这应该是O(n)时间复杂度和O(1)空间复杂度。

是否存在符合这些规范的现有算法?

3 个答案:

答案 0 :(得分:11)

如果你有一个大小为N的数组,其中存在从1到N的所有整数,你可以使用下面的O(N)算法(注意:为了这个伪代码,数组是1,以免引入不必要的复杂性在解释算法时):

  1. 从第一个数组元素开始。
  2. 如果其数组索引与其值匹配,请转到下一个。
  3. 如果没有,请将其与数值索引处的值相对应交换。
  4. 重复步骤3,直到不再需要交换为止。
  5. 如果不在数组末尾,请转到下一个数组元素,否则转到步骤7
  6. 转到步骤2.
  7. 完成

答案 1 :(得分:2)

答案 2 :(得分:1)

如果您确定所有整数都在1到N之间,则可以使用counting sort