用java实现Shell Sort

来源:互联网 发布:以色列 知乎 编辑:程序博客网 时间:2024/05/24 03:28

 

package sort;

 

public class ShellSort{

 

     private int[] gap;

 

     public void initGap(){

        gap = new int[3];

        gap[0] = 3;

        gap[1] = 2;

        gap[2] = 1;

     }

 

     public void sort(int[] data) {

        initGap();// 初始化增量数组

     

        for (int s = 0; s<gap.length; s++) {

            int d = gap[s];// 得到每次增量大小

     

            // 在当前增量d下对每个“隐形子序列”进行插入排序

            for (int i=d; i<data.length; i++) {

     

                if (data[i] < data[i-d]) {// 需要调整

                    int tmp = data[i];

     

                    int j;

                    for (j = i-d; j>=0 && tmp<data[j]; j-=d)// 插入排序实现

                        data[j+d] = data[j];

                    data[j+d] = tmp;

                }

            }

         }

     }

 

 

     /**

      * 测试

      * @param args

      */

     public static void main(String args[]) {

        ShellSort test = new ShellSort();

        int[] data = {70,23,40,10,80,20,90,100,75,60,45};

        test.sort(data);

     

        for (int i=0; i<data.length; i++)

            System.out.print(data[i]+", ");

     

     }

 

}