堆排序数组

时间:2013-04-15 17:39:58

标签: java arrays sorting heapsort

谁可以向我解释它的下一个代码序列是如何工作的。

 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 + "  ");   
 }

2 个答案:

答案 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

我希望有所帮助。