java - 排序算法运行时间

标签 java algorithm big-o

我编写了一个函数来按从旧到新的顺序对时间戳 (hh:mm:ss) 进行排序。我很想知道我的代码在最坏情况下的大致运行时间,但我不知道如何确定。

我粗略的猜测是 O(n-1)^2 因为嵌套的 for 循环。我是对的吗?

如果不是,那么有人可以确定我的代码在 Big O 表示法中的大致运行时间是多少?

public void sortTimeStamp(SortTime timestamps[])
{
    for(int i=0;i<timestamps.length-1;i++)
    {
        for(int j=0;j<timestamps.length-1;j++)
        {
            if(timestamps[j].hour > timestamps[j+1].hour)
            {
                swap_timestamps(timestamps, j);
            }
            else
            if(timestamps[j].hour == timestamps[j+1].hour)
            {
                if(timestamps[j].minutes > timestamps[j+1].minutes)
                {
                     swap_timestamps(timestamps, j);
                }
                else
                if(timestamps[j].minutes == timestamps[j+1].minutes && timestamps[j].seconds > timestamps[j+1].seconds)
                {
                    swap_timestamps(timestamps, j);
                }

            }
        }
    }
}

交换函数

public void swap_timestamps(SortTime timestamps[], int index)
    {
        SortTime temp = timestamps[index];
        timestamps[index] = timestamps[index+1];
        timestamps[index+1] = temp;
    }

最佳答案

我觉得这个排序算法是O(n^2)。
你的答案是 O((n-1)^2),它等于 O(n^2-2n+1)
但是大 O 符号 O(f(n)) 的意思是“时间大约与 f(n) 成正比”(不完全正确,但很容易理解)
因此,您不必考虑 -2n1 项。
您可以只考虑 n^2 项,不需要任何系数。

但是你可以做合并排序,时间复杂度是 O(n log n)
计数排序是可以的,因为 hh:mm:ss 只能表示 86400 种方式。它完成 O(n+k),其中 k=86400。

关于java - 排序算法运行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41054693/

相关文章:

Java:序列化初学者问题:-(

javac 错误消息不显示整个文件路径

java - Eclipse WTP、maven 和 m2eclipse - 不复制提供的 jar

java - 使用java从数据库中获取数据

java - 简单算法复杂度

algorithm - 与大O有关的困惑

algorithm - 2个运动物体的碰撞算法

java - LIstView SectionIndexer 给出错误 ArrayIndexOutOfBoundsException

algorithm - 哈希表真的可以是 O(1) 吗?

java - 2个字符串的java中.equals的时间复杂度是多少?