希尔排序

 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。

基本思想

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

希尔算法图示

 

 

 

代码实现

package sort;

import java.util.Arrays;

public class ShellSort {
    public static void main(String[] args) {
        int[]arr={8,9,1,7,2,3,5,4,6,0};
        shellSort(arr);

    }
    //希尔排序时,对有序序列在插入时采用交换法
    public static void shellSort(int[] arr){
        int temp=0;
        int count=0;
        for(int gap=arr.length/2;gap>0;gap/=2){
            for(int i=gap;i<arr.length;i++){
                //遍历各组中所有的元素(共gap组)步长为gap
                for (int j=i-gap;j>=0;j-=gap){
                    //遍历各组中所有元素大于加上步长后的那个元素,说明交换
                    if(arr[j]>arr[j+gap]){
                        temp=arr[j];
                        arr[j]=arr[j+gap];
                        arr[j+gap]=temp;
                    }
                }
            }
            System.out.println("希尔排序第"+(++count)+"轮");
            System.out.println(Arrays.toString(arr));
        }
    }
}

运行结果

 

posted @ 2021-12-30 21:06  活在记忆里的人  阅读(176)  评论(0编辑  收藏  举报