java 希尔排序(Shell)

希尔排序(Shell’s Sort)是插入排序的一种又称"缩小增量排序"(Diminishing Increment Sort),是直接插入排序算法的一种更高效的改进版本。

希尔排序是非稳定排序算法

在这里插入图片描述
先定义一个 int 类型的 数组 arr

int[] arr = new int[]{9,8,7,6,5,4,3,2,1};

第一次增量

int step = arr.length/2;

循环判断并交换

		//判断步长是否大于等于1,当步长等于1时,进行最后一次排序
        while(step >= 1){

            for (int i = 0; i < arr.length; i++) {

				//如果 j 大于数组减去步长的数值,会越界
                for (int j = i; j < arr.length - step; j = j + step) {

					//判断每一个子组的大小
                    if (arr[i] > arr[j + step]){

						//交换元素代码
                        int temp = arr[j + step];

                        arr[j + step] = arr[i];

                        arr[i] = temp;

                    }

                }

            }
            
      }

循环完后要改变步长

step = step/2;

遍历数组

        for (int i : arr) {

            System.out.print(i + "\t");

        }

结果

1	2	3	4	5	6	7	8	9

源代码

    public static void main(String[] args) {

        int[] arr = new int[]{9,8,7,6,5,4,3,2,1};
        
        int step = arr.length/2;

        while(step >= 1){

            for (int i = 0; i < arr.length; i++) {

                for (int j = i; j < arr.length - step; j = j + step) {

                    if (arr[i] > arr[j + step]){

                        int temp = arr[j + step];

                        arr[j + step] = arr[i];

                        arr[i] = temp;

                    }

                }

            }

            step = step/2;

        }

        for (int i : arr) {

            System.out.print(i + "\t");

        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值