2016-10-11 63 views
0

我想了解introsort並找到稀缺資源。我的理解是它使用快速排序,但當遞歸變深時切換到堆排序。這是因爲快速排序通常比堆排序快,除非通話深度變得很深。深度introsort切換到堆積

我的問題是,如何計算切換到heapsort之前的深度? Wikipediafloor(log(length_of_data))x2但我看過其他的東西。什麼是推理?我正確的算法想要堅持快速排序,直到它需要切換到堆排序的內存原因?

回答

0

我已經看到範圍從〜1.5 * log2(n)到〜2.0 * log2(n)的深度限制。這是爲了避免O(n^2)的最壞情況時間複雜性,而不是出於空間原因。

通過使用循環和遞歸的組合,僅對每個分區的較小「一半」使用遞歸,然後循環回來拆分較大的分區並繼續,從而將空間複雜度限制爲O(log2(n))該過程。循環返回也減少深度計數器,因爲它被用來替換否則會是另一個遞歸級別。

+0

是不是先做較小的一半會在不支持尾遞歸優化的語言(如Java)方面發揮作用? – Celeritas

+0

@Celeritas - 我刪除了對尾遞歸的引用,它只是一個循環。 – rcgldr