当前位置: 首页 > 知识库问答 >
问题:

选择排序的时间复杂性

刘嘉木
2023-03-14
start = 0
while (start!= len(array)-1):
    for i in range(start +1,len(array)):
            if (array[i]<array[start]):
                    array[i],array[start] = array[start],array[i]
                    print(array)
    start += 1

在这种情况下,复杂度不应该像O(n)=n*[(n-1)(n-2)......(n-(n-1))]那样,对于外环的n次中的每一次,内环运行的差分步长逐渐减小由一。这样O(n)就等于(n^3-n^2)/2。我的方法有什么问题?在这里输入code

共有1个答案

微生昌胤
2023-03-14

这样看。第一次(开始=0)内循环执行n-1步,第二次(开始=1)内循环执行n-2步,依此类推。因此,你有:

(n-1)(n-2)。。。1步,等于(n^2-n)/2步。

 类似资料:
  • 为什么选择排序的最佳案例时间复杂度为O(n^2),而插入排序和冒泡排序为O(n)?他们的平均时间是一样的。我不明白为什么最佳案例时间不同。如果你能帮忙,我将不胜感激。

  • 我有一个关于计算时间复杂度的非常普遍的问题(大O符号)。当人们说QuickSort最差的时间复杂度是O(n^2)(每次都选择数组的第一个元素作为轴心,并且数组是反向排序的)时,他们考虑了哪个操作来获得O(n^2)?人们会计算if/else语句所做的比较吗?或者他们只计算其进行的互换的总数?一般来说,你如何知道计算大O符号需要计算哪些“步骤”。 我知道这是一个非常基本的问题,但我已经阅读了谷歌上几乎

  • 让我们以合并排序的实现为例 a) 这种合并排序的时间复杂度是。并行化(1)和(2)会带来实际收益吗?从理论上讲,在对它们进行并行化之后,似乎最终也会出现。但实际上我们能得到什么好处吗? b) 这种合并排序的空间复杂度是。但是,如果我选择使用链表执行就地合并排序(不确定是否可以合理地使用数组),空间复杂性是否会变得,因为您必须考虑递归堆栈帧大小?既然它不能超过64,我们能把当作常数吗?我可能在几个地

  • 我已经学习了递归快速排序,最佳情况需要O(nlogn),最坏情况需要O(n^2)。但我试图找到迭代快速排序的时间复杂度。我知道最好的情况是O(nlogn)和O(n^2)。但我不会为最好的情况辩护。我正在学习本教程 https://www.techiedelight.com/iterative-implementation-of-quicksort/ 假设我们有15个元素,使枢轴索引位置始终处于中间

  • 考虑一个已经按降序排序的数组A[n]。堆已经生成。现在考虑一下我们将[1](数组索引从1开始)与[heap.size]交换的循环。以下是伪代码: 我们在元素1上调用Max-Heapify以通过允许它向下浮动到适当的位置来恢复堆属性。我们知道Max-Heapify将花费clg(n)时间。那么,循环不是应该花费c(lg(n)lg(n-1)... lg(1))=Theta(log(n))时间而不是jut

  • 下面是数组上HEAPSORT的伪代码 很明显,BUILD-MAX-HEAP的复杂度为O(n),MAX-HEAPIFY的复杂度为O(h),其中h是具有最大logn值的堆的高度。 我不完全理解的是为什么HeapSort有nlogn的复杂性。我知道我们有n次迭代,每次迭代都有一个MAX-HEAPIFY。但是他MAX-HEAPIFY调用在每次迭代中都得到一个大小递减的HEAP。那么为什么每次迭代都有O(l