谁可以向我解释它的下一个代码序列是如何工作的。
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>();
for (int w : x) {
pQueue.add(w);
}
for (int k = 0; k < x.length; k++) {
x[k] = pQueue.poll();
}
// Print the array
System.out.println("\nHere is the sorted array with HeapSort:");
for (int w : x) {
System.out.print(w + " ");
}
答案 0 :(得分:1)
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>();
此行创建一个Integers优先级队列。优先级队列存储“已排序”项目列表(在您的情况下为整数)。
当你向pQueue添加一个int时,它会将值放在正确的位置。
例如,如果我按此顺序将数字1,10和5添加到优先级队列,则会发生以下情况:
pqueue = {} //empty at start
pqueue = {1} //1 added
pqueue = {1->10} //10 added
pqueue = {1->5->10} // 5 added
注意5如何放置在1到10之间。
当您调用pQueue.poll();
时,将返回pQueue的第一个元素,该元素保证是队列中的最小值。 (在此过程中,该值将从队列中删除)。
重复调用将返回上面示例中的数字,顺序为1,5,10。
因此,您的数组会被排序。
答案 1 :(得分:0)
正如@DeltaLima所提到的,来自PriorityQueue documentation -
基于优先级堆的无界优先级队列。的要素 优先级队列按照其自然顺序排序,或 由比较器在队列建设时提供,具体取决于 使用哪个构造函数。
当您使用已定义自然顺序的整数时,它开箱即用。
我唯一不确定的是,这是真正的堆排序 - http://en.wikipedia.org/wiki/Heapsort
我希望有所帮助。