希尔排序法简介以及使用java代码实现

一:

希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因D.L.Shell于1959年提出而得名。

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。

 

 

二:使用代码实现

import java.util.Arrays;

public class 希尔排序 {
    public static void main(String[] args) {
int arr[]={8,6,9,4,3,7,1,2,5,10,0};
num2(arr);
    }
    //交换式
    static  void num(int []arr){
        int temp=0;
        int con=0;
        for(int gap=arr.length/2;gap>0;gap/=2){
            for(int i=gap;i<arr.length;i++){
                for (int j = i-gap; j >=0;j-=5 ) {
                         if(arr[j]>arr[j+gap]){
                             temp=arr[j];
                             arr[j]=arr[j+gap];
                             arr[j+gap]=temp;
                         }
                }
            }
        }
        System.out.println("第"+(++con)+"次 :"+Arrays.toString(arr));
    }
//移动式
    static  void num2(int[]arr) {
        int con=0;
        for (int gap = arr.length / 2; gap > 0; gap /= 2) {
            for (int i = gap; i < arr.length; i++) {
                int j=i;
                int temp=arr[j];
                  while (j-gap>=0&&temp<arr[j-gap]){
                      arr[j]=arr[j-gap];
                      j-=gap;
                  }
                    arr[j]=temp;
                }

            System.out.println("第"+(++con)+"次 :"+Arrays.toString(arr)); }
    }
}

 

posted @ 2021-02-11 23:02  袁志航  阅读(295)  评论(0)    收藏  举报