algorithm - 线性时间排序

标签 algorithm sorting

我需要编写一个算法来对大小为 [0..N-1] 的数组进行排序,该数组填充了 [0..N-1] 范围内的值。数组中的值不能重复。排序应该在线性时间内进行,我只允许使用一些额外的变量。

请评论我写的代码。据我猜测,最坏的时间是 2*N。还是线性时间?有没有可能让速度更快?

public int sort(){
    int i  = 0;             
    while (i < n){
        if (a[i] != i)      
            switchElements(a[i], a[a[i]]);                  
        else
            i++;                    
    }
    return count;
}

另外 1 我真的需要对数组进行排序,因为排序只是任务的一部分。完整的任务是在线性时间内查找数组中是否存在重复值,并且没有其他变量。

最佳答案

原始问题的答案:

包含[0..N-1]元素的数组,包含不重复元素[0..N-1]

为什么还要排序?排序后的数组已知并且是[0..N-1]


考虑到您的额外 1:您的算法看起来不错,您正在查看每个元素一次,并且必须至少查看每个元素一次,因此它不会变得更好。此外,2*N 也是 O(N)

关于algorithm - 线性时间排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13349902/

相关文章:

algorithm - 打印数组的所有产品组合

python - 试图理解 python 递归函数

algorithm - 红黑树的直觉

algorithm - 桶排序的近乎完美的分布模型

java - 使用多个条件对 ArrayList 进行排序

algorithm - 对包含 7 个整数的数组进行排序的最快方法是什么?

jquery - 使用 ajax 刷新 View MVC C# 上的模型

javascript - 使用 StupidTable JS 和日期列进行排序

python - 获取 x 和 y 之间的 n 个数字的列表

c - 按照 3 条规则(奇数、偶数、排序)显示输出