2013-04-15 120 views
-6

誰能向我解釋下一個代碼序列的工作原理。堆排序陣列

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

閱讀PriorityQueue的javadoc,你可能會理解它是如何工作的。 http://docs.oracle.com/javase/7/docs/api/java/util/PriorityQueue.html – DeltaLima

回答

0

如@DeltaLima所提到的,從PriorityQueue documentation -

的極大優先級隊列根據優先級堆。 優先級隊列的元素根據其自然順序排列,或由隊列構建時提供的比較器排序,具體取決於使用哪個構造函數的 。

由於您使用的整數具有自然排序定義,所以它開箱即用。

我不知道的唯一的事情是,如果這是真正的堆排序 - http://en.wikipedia.org/wiki/Heapsort

我希望幫助。

0
PriorityQueue<Integer> pQueue = new PriorityQueue<Integer>();  

此行創建一個整數優先級隊列。優先級隊列存儲「排序」項目列表(在您的情況下爲整數)。

當您將一個int添加到pQueue時,它會將該值放在正確的位置。

例如,如果我在這個以優先級隊列添加數字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

這個您的數組被分類所致。