// Path: Java-data-Structures/src/main/java/com/sorting/ShellSort.java
// public class ShellSort {
// 
//     /**
//      * Use the shell 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;
//         int h = computeMaxH(A.length);
//         while (h >= 1) {
//             hInsertionSort(A, h);
//             h = h / 3;
//         }
//     }
// 
//     private static void hInsertionSort(Comparable[] A, int h) {
//         Comparable curVal;
//         int j;
//         for (int i = h; i < A.length; i = i + h) {
//             curVal = A[i];
//             j = i - h;
//             while ((j >= 0) && less(curVal, A[j])) {
//                 A[j + h] = A[j];
//                 j = j - h;
//             }
//             A[j + h] = curVal;
//         }
//     }
// 
//     private static int computeMaxH(int len) {
//         int h = 1;
//         while (h < len / 3)
//             h = 3 * h + 1;
//         return h;
//     }
// 
//     private static boolean less(Comparable a, Comparable b) {
//         int cmp = a.compareTo(b);
//         if (cmp < 0)
//             return true;
//         return false;
//     }
// 
// }


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



public class TestShellSort extends TestCase{

    public void testShellSort() {

        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/ShellSort.java
// public class ShellSort {
// 
//     /**
//      * Use the shell 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;
//         int h = computeMaxH(A.length);
//         while (h >= 1) {
//             hInsertionSort(A, h);
//             h = h / 3;
//         }
//     }
// 
//     private static void hInsertionSort(Comparable[] A, int h) {
//         Comparable curVal;
//         int j;
//         for (int i = h; i < A.length; i = i + h) {
//             curVal = A[i];
//             j = i - h;
//             while ((j >= 0) && less(curVal, A[j])) {
//                 A[j + h] = A[j];
//                 j = j - h;
//             }
//             A[j + h] = curVal;
//         }
//     }
// 
//     private static int computeMaxH(int len) {
//         int h = 1;
//         while (h < len / 3)
//             h = 3 * h + 1;
//         return h;
//     }
// 
//     private static boolean less(Comparable a, Comparable b) {
//         int cmp = a.compareTo(b);
//         if (cmp < 0)
//             return true;
//         return false;
//     }
// 
// }


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

package com.test.sorting;



public class TestShellSort extends TestCase{

    public void testShellSort() {

        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 };

        ShellSort.sort(A);