@@ -0,0 +1,2085 @@
+// Version Linpz%0Apublic class Solution %7B%0A    /**%0A     * @param A: Given an integer array%0A     * @return: void%0A     */%0A    private void siftdown(int%5B%5D A, int k) %7B%0A        while (k * 2 + 1 %3C A.length) %7B%0A            int son = k * 2 + 1;%0A            if (k * 2 + 2 %3C A.length && A%5Bson%5D %3E A%5Bk * 2 + 2%5D)%0A                son = k * 2 + 2;%0A            if (A%5Bson%5D %3E= A%5Bk%5D)%0A                break;%0A            %0A            int temp = A%5Bson%5D;%0A            A%5Bson%5D = A%5Bk%5D;%0A            A%5Bk%5D = temp;%0A            k = son;%0A        %7D%0A    %7D%0A    %0A    public void heapify(int%5B%5D A) %7B%0A        for (int i = (A.length - 1) / 2; i %3E= 0; i--) %7B%0A            siftdown(A, i);%0A        %7D%0A    %7D%0A%7D%0A%0A// Version 1: this cost O(n)%0Apublic class Solution %7B%0A    /**%0A     * @param A: Given an integer array%0A     * @return: void%0A     */%0A    private void siftdown(int%5B%5D A, int k) %7B%0A        while (k %3C A.length) %7B%0A            int smallest = k;%0A            if (k * 2 + 1 %3C A.length && A%5Bk * 2 + 1%5D %3C A%5Bsmallest%5D) %7B%0A                smallest = k * 2 + 1;%0A            %7D%0A            if (k * 2 + 2 %3C A.length && A%5Bk * 2 + 2%5D %3C A%5Bsmallest%5D) %7B%0A                smallest = k * 2 + 2;%0A            %7D%0A            if (smallest == k) %7B%0A                break;%0A            %7D%0A            int temp = A%5Bsmallest%5D;%0A            A%5Bsmallest%5D = A%5Bk%5D;%0A            A%5Bk%5D = temp;%0A            %0A            k = smallest;%0A        %7D%0A    %7D%0A    %0A    public void heapify(int%5B%5D A) %7B%0A        for (int i = A.length / 2; i %3E= 0; i--) %7B%0A            siftdown(A, i);%0A        %7D // for%0A    %7D%0A%7D%0A%0A%0A// Version 2: This cost O(nlogn)%0Apublic class Solution %7B%0A    /**%0A     * @param A: Given an integer array%0A     * @return: void%0A     */%0A    private void siftup(int%5B%5D A, int k) %7B%0A        while (k != 0) %7B%0A            int father = (k - 1) / 2;%0A            if (A%5Bk%5D %3E A%5Bfather%5D) %7B%0A                break;%0A            %7D%0A            int temp = A%5Bk%5D;%0A            A%5Bk%5D = A%5Bfather%5D;%0A            A%5Bfather%5D = temp;%0A            %0A            k = father;%0A        %7D%0A    %7D%0A    %0A    public void heapify(int%5B%5D A) %7B%0A        for (int i = 0; i %3C A.length; i++) %7B%0A            siftup(A, i);%0A        %7D%0A    %7D%0A%7D

add 130