java 希爾排序

VictorLeeLk發表於2017-08-26
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));

    }

}

相關文章