排序算法之希尔排序

希尔排序

在这里插入图片描述
直接插入排序算法简单,但时间性能为O(n^2),对于此性能,显然当n较小时比n较大时效率要好,对于直接插入排序方法,若排序表初始状态的关键码有序性较好,该算法的效率较高,其时间效率可提高到O(n)。希尔排序(Shell Sort)是从这两点出发,给出插入排序的改进方法。希尔排序又称缩小增量排序,是1959年由D.L.Shell提出的。

希尔排序的思想是:先选取一个小于n的整数di(称之为步长),然后把排序表中的n个记录分为di个组,从第一个记录开始,间隔为di的记录为同一组,各组内进行直接插入排序,一趟之后,间隔di的记录有序,随着有序性的改善,减小步长di,重复进行,直到di=1,使得间隔为1的记录有序,也就使整体达到了有序。

代码展示

package demo4;

import java.util.Arrays;

public class ShellSort {

    public static void main(String[] args) {
        int[] arr = new int[]{5,4,6,3,8,9,4,1,7,2,6};
        System.out.println("排序前:"+Arrays.toString(arr));
        shellSort(arr);
        System.out.println("排序后:"+Arrays.toString(arr));
    }

    public static void shellSort(int[] arr){
        int k = 1;
        //遍历所有的步长
        for(int d=arr.length/2;d>0;d/=2){
            //遍历所有元素
            for(int i=d;i<arr.length;i++){
                //遍历本组中所有的元素
                for(int j=i-d;j>=0;j-=d){
                    //如果当前元素大于加上步长后的那个元素
                    if(arr[j]>arr[j+d]){
                        int temp = arr[j];
                        arr[j] = arr[j+d];
                        arr[j+d] = temp;
                    }
                }
            }
            //查看每次排序后的结果
            System.out.println("第"+k+"次排序结果:"+Arrays.toString(arr));
            k++;
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值