排序数组的时间复杂度

时间:2014-05-07 04:33:03

标签: java

排序数组是排序算法的最佳情况吗?我不确定。 我们假设数组按升序排序。

此外,我并不完全确定这些排序算法的时间复杂性背后的原因:

  • 在排序数组= O(nlog2(n))上的Mergesort,我可以假设它是否排序无关紧要它总是O(nlog2(n))?

  • 排序数组上的冒泡排序= O(n),因为它只遍历数组一次?

  • 排序数组上的Quicksort = O(nlog2(n))?不过,我不知道如何解释这个。

3 个答案:

答案 0 :(得分:1)

在少数情况下,排序数组的复杂度最高。

BubbleSort将为排序数组提供最佳性能。

如果您正在对排序顺序进行处理,那么HeapSort会给排序数组带来更差的性能,例如,如果您按照acesindg顺序对数组进行排序,并且inpur数组按降序排列

插入排序在排序数组或几乎排序的数组

上提供了出色的性能

选择排序为O(n ^ 2),无论您将其作为输入提供什么数组:)

关于你的第二个问题,大部分时间的复杂性始终是最糟糕的时间复杂性。对于ex插入排序是O(n ^ 2),但对于几乎排序的数组非常快。有一些排序算法适用于少于1000个元素,但是对于更多数量的元素会产生指数复杂性

答案 1 :(得分:1)

已经排序的数组通常(但不一定)是给定排序算法的最佳情况。例如,如果您正确选择了枢轴点,则排序数组实际上可能是quicksort的最坏情况。

答案 2 :(得分:-1)

在堆栈中找到这个答案,这将更好地解释你。 !!

  

这取决于(a)整数有多大,(b)   输入数组是否包含随机顺序或整数中的整数   几乎排序的顺序,(c)你是否需要排序算法   稳定与否,以及其他因素,(d)是否整个清单   数字适合内存(内存排序与外部排序),以及(e)   你运行它的机器。

     

实际上,您的语言标准库中的排序算法   如果你需要的话,可能会非常好(非常接近最佳)   内存排序。因此,在实践中,只需使用任何种类   功能由标准库提供,并测量运行   时间。只有当你发现(i)排序是很大一部分时   总运行时间,以及(ii)运行时间是不可接受的,   你是否应该打扰排序算法?如果那些   两个条件确实存在,那么你可以看看具体方面   您的特定域名并尝试其他快速排序   算法

     

但实际上,在实践中,排序算法很少   主要表现瓶颈。

可以在此link 找到不同排序函数的复杂性

Link

复制