希尔排序(Shell Sort)也是一种插入排序,又称缩小增量排序(Diminishing Increment Sort)。希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的元素越来越多,当增量减至1时,整个序列分成一组,算法便终止。

算法描述:

1,先取一个正整数d1<n,把所有序号相隔d1的数组元素放在一组,组内进行直接插入排序。

2,然后取d2<d1,重复1中的分组和排序操作。

3,直至di=1,即所有记录放进一个组中排序为止。

动图演示:

代码实现:

public class Sort{
    public static void printArr(int[] arr){
         for(int i:arr){
              System.out.print(i+" ");
         }
    }

    public static void shellSort(int[] arr){
          if(arr==null){
               return;
          }
          //增量 按1/2数组长度递减
          int gap=arr.length/2;
          int temp,j;
          while(gap>0){
               //遍历数组,同一组内元素进行插入排序
               for(int i=gap;i<arr.length;i++){
                   j=i;
                   temp=arr[i];                   
                   while(j-gap>=0&&temp<arr[j-gap]){
                         arr[j]=arr[j-gap];
                         j=j-gap;
                   }
                   arr[j]=temp;
               }
               gap=gap/2;
          }
    }

    public static void main(String[] args){
           int[] arr=new int[]{3,44,38,5,47,15,36,26,27,2,46,4,19,50,48};
           shellSort(arr);
           printArr(arr);
    }
}

 

 posted on 2018-07-19 16:36  会飞的金鱼  阅读(135)  评论(0)    收藏  举报