我正在实施Priority Queue
,但我无法理解为什么outputs
和sorted
数组存在不同的unsorted
。代码和输出如下所示:
排序数组
import java.io.*;
import java.util.*;
class Test {
public static void main(String args[] ) throws Exception {
PriorityQueue<Integer> pq=new PriorityQueue<>();
int[] a={0,1,2,3,4,5,6,7,8};
for (int x:a ) {
pq.add(x);
}
Iterator itr=pq.iterator();
while(itr.hasNext()){
System.out.print(itr.next()+" ");
}
System.out.println();
}
}
输出:0 1 2 3 4 5 6 7 8
未排序的数组
import java.io.*;
import java.util.*;
class Test {
public static void main(String args[] ) throws Exception {
PriorityQueue<Integer> pq=new PriorityQueue<>();
int[] a={4,3,6,2,1,5};
for (int x:a ) {
pq.add(x);
}
Iterator itr=pq.iterator();
while(itr.hasNext()){
System.out.print(itr.next()+" ");
}
System.out.println();
}
}
输出:1 2 5 4 3 6
任何人都可以解释一下为什么两种情景的输出之间存在差异?
答案 0 :(得分:1)
PriorityQueue实现为binary heap。二进制堆中项的顺序取决于它们的插入顺序。例如,按顺序插入项目[1,2,3,4]将为您提供堆:
1
2 3
4
但是如果要按顺序[1,3,4,2]插入,那么你的堆就是:
1
3 2
4
请记住,二进制堆不是排序数据结构。它以这样的方式排序:最小项(在最小堆的情况下)总是在根,并且子节点大于它们的父节点。但是对于给定的一组项目,有许多可能的堆排序。
你问,&#34;如何在堆中订购{4,3,6,2,1,5}
?&#34;让我们来看看吧。