java 希尔排序

来源:互联网 发布:art template.js 下载 编辑:程序博客网 时间:2024/06/12 21:20
package sort_book_datastruction;import java.util.Arrays;/** * 2017/4/1 * 希尔排序:是插入排序的一种,又称为缩小增量的插入排序或者分段排序 * 基本思想:将整个待排序序列分割成若干个待排序子序列; *       对这些子序列分别进行排序,不断缩小增量,构成子序列,再排序; *       当整个序列基本有序时,再对整个序列进行一次排序。 *操作方法: *     1)选择一个增量序列,d={t1,t2,...tk};tk=1(增量序列的最后一项必须为1),该序列是减序列; *     2)按增量序列的个数k,对序列进行k趟的排序 *     3)每趟排序根据对应的增量ti,对待排序列分割成长度为m的子序列,分别对各个子序列进行直接插入排序; * @author Administrator * */public class ShellSort {    public void shellInsert(int[] array,int d){        for(int i =d;i<array.length;i++){            if(array[i]<array[i-d]){                int x = array[i];                int j = i - d;                while(j>0 && x<array[j]){                    array[j+d]=array[j];                    j=j-d;                }                array[j+d]=x;            }        }    }    public void shellSort(int[] array,int[] d){        for(int k =0;k<d.length;k++){            shellInsert(array,d[k]);        }    }    public static void main(String[] args) {        // TODO Auto-generated method stub        ShellSort ss = new ShellSort();        int[] a={2,5,3,8,11,6,15,9,45,7,5};        int[] d ={6,3,1};        ss.shellSort(a, d);        System.out.println("a="+Arrays.toString(a));    }}