Redian新闻
>
请教关于build heap BIG-O的问题
avatar
请教关于build heap BIG-O的问题# JobHunting - 待字闺中
d*i
1
小弟请大哥们指教,谢谢。
以下两种build heap的方法。
第一种用PriorityQueue建的heap,请问是O(n)还是O(nlogn)?
第二种不用PriorityQueue,请问是是O(n)还是O(nlogn)。
第一种:
PriorityQueue minHeap = new PriorityQueue();
for (int i : a) {
minHeap.add(i);
}
第二种:
public static void buildMaxHeap(int[] a) {
int i = (a.length - 1) >> 1;
while (i >= 0) {
maintainMaxHeap(a, a.length, i);
i--;
}
}
public static void maintainMaxHeap(int[] a, int heapSize, int i) {
int l = (i << 1) + 1;
int r = (i << 1) + 2;
int parentMax = i;
if (l < heapSize && a[l] > a[parentMax]) {
parentMax = l;
}
if (r < heapSize && a[r] > a[parentMax]) {
parentMax = r;
}
if (parentMax != i) {
swap(a, parentMax, i);
maintainMaxHeap(a, heapSize, parentMax);
}
}
avatar
J*o
2
第一种O(nlogn), 第二种O(n)
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。