时间复杂度

想请问大家一个问题关于时间复杂度的,因为刚刚看到有人说冒泡排序最佳情况下的时间复杂度是O(n)级别,也就是正好是排好序的情况,代码很简单,如下:
public void bubbleSort(int arr[]) {
    boolean didSwap;
    for(int i = 0, len = arr.length; i < len - 1; i++) {
        didSwap = false;
        for(int j = 0; j < len - i - 1; j++) {
            if(arr[j + 1] < arr[j]) {
                swap(arr, j, j + 1);
                didSwap = true;
            }
        }
        if(didSwap == false)
            return;
    }    
}
但我想问,单纯的遍历难道不算时间复杂度吗
全部评论
有序了比较次数也不会减少只是减少了交换的次数,我觉得还是n2
1 回复 分享
发布于 2016-08-30 11:46
谢谢大家啦,这个是O(N)的,我没注意到那个变量。。。
点赞 回复 分享
发布于 2016-08-30 15:37
不算了吗 所以是o(n)
点赞 回复 分享
发布于 2016-08-30 11:01
算了, 遍历一次 遍历了n个数 所以是O(n)
点赞 回复 分享
发布于 2016-08-30 11:07
个人觉得,时间复杂度是根据代码块内具体执行了多少条语句来计算。对于for循环,假如循环体内有3条语句,循环执行了n次;那时间复杂度就是3*n,即O(n)。
点赞 回复 分享
发布于 2016-08-30 12:47
在排好序的情况下,第一次从后往前遍历根本不会发生任何交换,也就是永远有arr[j+1] < arr[j] == false,那么,内层for循环执行完一遍后,didSwap == false, 程序直接结束。 冒泡排序从后往前遍历,就是为了把小的往前冒,既然遍历一遍之后没有冒一次,那么说明整个序列已经排好序了,程序就可以直接结束了。 排好序的情况下,遍历一遍,程序结束,O(n).
点赞 回复 分享
发布于 2016-08-30 13:10
还是O(n)啊 有什么问题吗
点赞 回复 分享
发布于 2016-08-30 14:09

相关推荐

09-23 16:24
河海大学 C++
俺的offer在哪:至少还有感谢信,我连感谢信都没发,三面完隔天状态查询就是未通过😂
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务