JAVAヒルソートコード


ヒルアルゴリズム学習使用コードは以下の通りである.
import untils.AlgorithmUtils;

import java.util.Arrays;

/**
 *                 
 * 
 *     ,           ,                。             。
 * 
 *                           :
 * 
 *                    ,   ,            
 *              ,                
 *                                     ,         “    ” ,                。
 * 
 */
public class Shell {
     

    /**
     *     
     *
     * @param arr
     */
    public static void studyShellSort(int[] arr) {
     

        System.out.print("   : ");
        System.out.println(Arrays.toString(arr));
        System.out.println("  shell  :--Start-- ");

        int length = arr.length;

        for (int len = length / 2; len > 0; len /= 2) {
     
            boolean flag = true;
            System.out.println("     : " + len);
            for (int i = len; i < length; i++) {
     
                int c = 0;

                for (int j = i - len; j >= 0; c = j -= len) {
     
                    System.out.println(c + " :     = " + j + ";      = " + arr[j] + ";      (   +  ) = " + (j + len) + ";     (   +   ) = " + arr[j + len]);
                    System.out.println("             :");
                    System.out.println(Arrays.toString(arr));
                    if (arr[j] > arr[j + len]) {
     
                        AlgorithmUtils.swap(arr, j, j + len);
                        System.out.println("            ,    :");
                        System.out.println(Arrays.toString(arr));
                    } else {
     
                        System.out.println("          ,     ");
                    }
                }
                System.out.println();
            }
            //    
            System.out.println("  : " + Arrays.toString(arr));
        }
        System.out.println("shell    :--END-- ");
    }
}

public class AlgorithmUtils {
     
    public static void swap(int[] arr, int a, int b) {
     
        arr[a] = arr[a] + arr[b];
        arr[b] = arr[a] - arr[b];
        arr[a] = arr[a] - arr[b];
    }

}

ヒルアルゴリズムはツールクラスとして以下のコードを使用する
import untils.AlgorithmUtils;

public class Shell {
     
    /**
     *
     * @param arr     
     * @return     
     */
    public static int[] shellSort(int[] arr) {
     
        int length = arr.length;
        for (int len = length / 2; len > 0; len /= 2) {
     
            for (int i = len; i < length; i++) {
     
                for (int j = i - len; j >= 0; j -= len) {
     
                    if (arr[j] > arr[j + len]) {
     
                        AlgorithmUtils.swap(arr, j, j + len);
                    }
                }
            }
        }
        return arr;
    }
}