使用Array约束对算法进行排序

时间:2014-01-29 16:57:39

标签: algorithm sorting big-o

我试图想出一个在O(nlog(logn))时间内排序和排列A的算法。 其中A [0 ... n-1]具有属性A [i]> = A [i-j],对于所有j> = log(n)。

到目前为止,我已经考虑将A分区为每个logn大小的块。

然后我认为第一个块会比它之后的块小得多吗?

我想我错过了它的一部分。

1 个答案:

答案 0 :(得分:2)

Tree Sort将是一个选项。从数组的左端开始,将元素提供给树。每当您的树具有多个log(n)元素时,您将获取最小元素,因为您确定所有后续元素都更大,并将其放回已排序的数组中。这样,树大小始终是log(n),树操作的成本是log(log(n))。实际上,您只需要操作(1)插入随机元素和(2)删除最小元素,因此您不一定需要树,但任何类型的priority queue都可以用于此目的。这样,平均和最差情况都能满足您的要求。