Java八大排序算法之一希尔排序

基本思想:

算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

代码块:

//希尔排序(最小增量排序)
public class ShellSort {
    public static void main(String[] args) {
        int a[]={34,21,60,1,44,31,57,18,9,11};
        double der=a.length; //数组总个数
        int temp=0;
        while(true){
            der=Math.ceil(der/2);  //取整,返回目标数的最小整数
            int d=(int) der;       //增量d
            for(int p=0;p//排序次数
                for(int i=p+d;i//控制a[i]的位置比a[j]的位置多一个d的增量
                    int j=i-d;
                    temp=a[i];
                    for(;j>=0&&a[j]>temp;j-=d){//当左边的a[j]的值大于a[i]的值的时候交换
                        a[j+d]=a[j];
                    }
                    a[j+d]=temp;
                }
            }
            if(d==1){
                break;
            }
        }
        for(int i=0;iout.println(a[i]);
        }
    }
}

你可能感兴趣的:(算法,排序算法)