我要排序的阵列,A,根据本成本模式排序:当比较花费任何时间
对于任何x值,形式A的分配[I] = x具有的成本1.另外,A [i] = A [j]的成本为1.
其他操作,如比较和分配for x = A [i](其中x不是阵列)的成本为0.
问题:
给一个下界排序的阵列A.你的答案应该是在正方面的精确表达式,而不是使用渐近记法所要求的最坏情况下的时间。
描述使用O(n)空间的排序算法。运行时应该与1中给出的下界完全匹配(确切地说,不是渐近地)。
描述对这个成本模型最优的就地排序算法。运行时应该完全匹配1中给出的边界(完全不是渐近地)。
我尝试:
ñ。这是因为,在最糟糕的情况下,数组中的n个元素处于索引中,因此它们将不需要处理。因此,需要n个赋值才能按排序顺序获取数组。
我的算法psudo代码:
def weird_sort(A): B = an array the same size of A C = an array of bools (default True) the same size of A for i in range(0, A.size): min = first index in c that is True for j in range(0, A.size): if (A[j] < A[min]) and (C[j]): min = j B[i] = A[min] C[i] = False A = B
我认为这恰恰是N次跑,因为我们正在进入一个指定任何唯一的一次是在最后一行,在那里我们复制B的内容变成A.
- 不知道从哪里开始。在我看来,为了保持一切到位,我们必须交换数组A中的东西,但是我无法弄清楚如何去掉如何用n/2交换对数组进行排序。有人能让我朝着正确的方向前进吗?你也可以仔细检查我的答案1和2吗?
这可能是一个更好的问题https://cs.stackexchange.com/ – Stedy
这听起来像循环排序发明的确切情况。 :-) – templatetypedef