i c } m l p a o s r s f } f } t u u H n n F e c c o a v w } v v w } r v v w } u p s a / a h a a h e h a a h n S o r 1 r i r r i t e r r i d o r . l l u a l a r t s i e h i j l e l s s h j l r p l c e i } i } } t t ( e / e [ [ / e n A o h f f e i S _ = = i a - = = j t j 0 a - + d c i c l o o p = ] ] p = = s j l h c s s n l n n n > A n 0 > t A u = d i h c [ l s s l c e b u : . = d 1 . e = = d 1 1 s l i h l e [ [ o h r t c j c 0 m j t l = d l i o t l c c i { e i [ o 0 u o p s t u ( o d l c o h l a o I u s u { [ e s _ c 2 < d ] t c i = d k n n n { t n = 0 m t a * + e ] l t t ( t ] p ( s l l l + < m d c = { ] / & s & : o e 1 = p = ] h ) 2 s - [ s c n s i 2 , j , i < 1 [ = s = l * - 1 ] n + { c [ d l i 0 o l h s c t o 1 , , u 1 e i [ h e c [ t n l l i m I n n d o l p + n . . [ & ] c d t c c I & ] ] 1 ] o o n { u u t s { n n ] [ t t , c _ h - - i l l 1 1 o d ) c ] - a l < l : s ) I [ n c t h , i _ l d l + e 1 n ] : { I n t ) {

算法思想:将待排序序列构造成一个大顶堆,此时,整个序列的最大值就是堆顶的根节点。将其与末尾元素进行交换,此时末尾就为最大值。然后将剩余n-1个元素重新构造成一个堆,这样会得到n个元素的次小值。如此反复执行,便能得到一个有序序列了。

github地址:https://github.com/cubegao/LeetCode