【发布时间】:2018-04-02 19:54:48
【问题描述】:
我想在这个成本模型下对一个数组 A 进行排序:
-
对于任何值 x,A[i] = x 形式的赋值的成本为 1。此外,A[i] = A[j] 的成本为 1。
其他操作,例如比较和赋值 for x = A[i](其中 x 不是数组中的位置)的成本为 0。
问题:
给出对数组 A 进行排序所需的最坏情况时间的下限。您的答案应该是关于 n 的精确表达式,而不是使用渐近符号。
描述一种使用 O(n) 空间的排序算法。运行时应该与 1 中给出的下限完全匹配(完全一致,不是渐近的)。
描述一种最适合此成本模型的就地排序算法。运行时应与 1 中给出的界限完全匹配(完全一致,而非渐近)。
我的尝试:
n.这是因为,在最坏的情况下,数组的 n 个元素位于它们不应该在的索引中。因此需要 n 次赋值才能使数组按排序顺序。
-
我的伪代码算法:
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 时间来运行,因为我们将任何东西分配给 A 的唯一一次是在最后一行,我们将 B 的内容复制到 A。
- 不知道从哪里开始。在我看来,为了使所有内容保持原样,我们必须交换数组 A 中的内容,但我不知道如何使用 n/2 交换对数组进行排序。有人可以让我朝着正确的方向前进吗?你也可以仔细检查我对 1 和 2 的回答吗?
【问题讨论】:
-
这对cs.stackexchange.com来说可能是一个更好的问题
-
这听起来就像发明循环排序的确切情况。 :-)
标签: arrays algorithm performance sorting