// Path: Java-data-Structures/src/main/java/com/sorting/HeapSort.java
// public class HeapSort {
// 
//     /**
//      * Use the Heap sort method to sort the given array A
//      * 
//      * @param A
//      *            Array of Comparable that contains the object to sort
//      */
//     public static void sort(Comparable[] A) {
//         if (A == null)
//             return;
//         heapify(A);
//         for (int k = A.length; k >= 1; k--) {
//             exch(A, 1, k);
//             sink(A, 1, k - 1);
//         }
//     }
// 
//     private static void heapify(Comparable[] A) {
//         for (int k = A.length / 2; k >= 1; k--)
//             sink(A, k, A.length);
//     }
// 
//     private static void sink(Comparable[] A, int indice, int len) {
//         int j;
//         while (indice <= len / 2) {
//             j = 2 * indice;
//             if ((j < len) && (less(A, j, j + 1)))
//                 j++;
//             if (!less(A, indice, j))
//                 break;
//             exch(A, indice, j);
//             indice = j;
//         }
//     }
// 
//     private static void exch(Comparable[] A, int i, int j) {
//         i = getArrayIndex(i);
//         j = getArrayIndex(j);
//         Comparable k = A[i];
//         A[i] = A[j];
//         A[j] = k;
//     }
// 
//     private static boolean less(Comparable[] A, int i, int j) {
//         i = getArrayIndex(i);
//         j = getArrayIndex(j);
//         if (A[i].compareTo(A[j]) < 0)
//             return true;
//         return false;
//     }
// 
//     private static int getArrayIndex(int indice) {
//         return --indice;
//     }
// 
// }


import com.sorting.HeapSort;
import junit.framework.TestCase;
package com.test.sorting;



public class TestHeapSort extends TestCase{

    public void testHeapSort() {

        String[] A = { "zs", "qw", "qr", "miguel", "rtd", "fgs", "qq", "mk", "slao", "oiu", "vf", "xs", "er", "qw",
                "bv" };
        Integer[] B = { 2, 4, 7, 542, 0, 1, 3, 0, 6, 2, 7, 9, 10, 2, 4, 6, 0, 3, 2, 9, 2, 77, 33, 22, 5, 4, 2, 2, 2 };

// Path: Java-data-Structures/src/main/java/com/sorting/HeapSort.java
// public class HeapSort {
// 
//     /**
//      * Use the Heap sort method to sort the given array A
//      * 
//      * @param A
//      *            Array of Comparable that contains the object to sort
//      */
//     public static void sort(Comparable[] A) {
//         if (A == null)
//             return;
//         heapify(A);
//         for (int k = A.length; k >= 1; k--) {
//             exch(A, 1, k);
//             sink(A, 1, k - 1);
//         }
//     }
// 
//     private static void heapify(Comparable[] A) {
//         for (int k = A.length / 2; k >= 1; k--)
//             sink(A, k, A.length);
//     }
// 
//     private static void sink(Comparable[] A, int indice, int len) {
//         int j;
//         while (indice <= len / 2) {
//             j = 2 * indice;
//             if ((j < len) && (less(A, j, j + 1)))
//                 j++;
//             if (!less(A, indice, j))
//                 break;
//             exch(A, indice, j);
//             indice = j;
//         }
//     }
// 
//     private static void exch(Comparable[] A, int i, int j) {
//         i = getArrayIndex(i);
//         j = getArrayIndex(j);
//         Comparable k = A[i];
//         A[i] = A[j];
//         A[j] = k;
//     }
// 
//     private static boolean less(Comparable[] A, int i, int j) {
//         i = getArrayIndex(i);
//         j = getArrayIndex(j);
//         if (A[i].compareTo(A[j]) < 0)
//             return true;
//         return false;
//     }
// 
//     private static int getArrayIndex(int indice) {
//         return --indice;
//     }
// 
// }


// Path: Java-data-Structures/src/test/java/com/test/sorting/TestHeapSort.java
import com.sorting.HeapSort;
import junit.framework.TestCase;

package com.test.sorting;



public class TestHeapSort extends TestCase{

    public void testHeapSort() {

        String[] A = { "zs", "qw", "qr", "miguel", "rtd", "fgs", "qq", "mk", "slao", "oiu", "vf", "xs", "er", "qw",
                "bv" };
        Integer[] B = { 2, 4, 7, 542, 0, 1, 3, 0, 6, 2, 7, 9, 10, 2, 4, 6, 0, 3, 2, 9, 2, 77, 33, 22, 5, 4, 2, 2, 2 };

        HeapSort.sort(A);