java 希尔排序

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

    }

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值