package sort; //å æåº /** * (1)å æ¯å ·æä»¥ä¸æ§è´¨çå®å ¨äºåæ ï¼æ¯ä¸ªç»ç¹çå¼é½å¤§äºæçäºå ¶å·¦å³å©åç»ç¹çå¼ï¼ç§°ä¸ºå¤§é¡¶å ï¼ * æè æ¯ä¸ªç»ç¹çå¼é½å°äºæçäºå ¶å·¦å³å©åç»ç¹çå¼ï¼ç§°ä¸ºå°é¡¶å ã * (2)PriorityQueueéè¿äºåå°é¡¶å å®ç°ï¼å¯ä»¥ç¨ä¸æ£µå®å ¨äºåæ 表示 * (3)poll()è·åå¹¶å é¤éé¦å ç´ * (4)peek()è·åä½ä¸å é¤éé¦å ç´ */ public class StackSort { public void sort(Comparable[] a) { int N = a.length; //æé æåºå ,åªéæ«ææ°ç»ä¸ä¸åå ç´ for (int i = N/2-1; i < 0; i++) { sink(a, i ,N); } //å°æåºå ä»å¤§å°å°è¾åº N = N-1; while (N >= 0) { exch(a, 0, N--); sink(a, 0, N); } } private void sink(Comparable[] a, int i,int N) { while (2*i+1 <= N-1) { int j = 2*i+1; if (j < N-1 && a[j].compareTo(a[j+1]) < 0) j++; if (a[j].compareTo(a[i]) > 0) break; exch(a, i, j); i = j; } } private void exch(Comparable[] a, int i, int j) { Comparable temp = a[i]; a[i] = a[j]; a[j] = temp; } }