java 希尔排序

希尔排序

1.实现过程

希尔排序,是按照缩量进行分割元素,然后对分割的元素进行比较,具体可以看下方的排序过程。

2.排序过程

第一趟排序
在这里插入图片描述
序列中11个元素,按照二分法划分,11/2 向下取整为 5,划分为两个部分,对两个部分进行两两比较,如:49和13,38和27进行比较,交换位置,然后得出了第一趟排序,13,27,49,55,4,49,38,65,97,76,91。

第二趟排序
在这里插入图片描述
第二趟排序,因为划分为两部分,按照二分法继续划分,5/2 向下取整 为2,然后对元素进行比较,13,49,4,38,97,91比较并排序,27,55,49,65,76比较并排序,交换位置,得到4,27,13,49,38,55,49,65,91,76,97。

第三趟排序
在这里插入图片描述
第三趟排序,继续使用二分法进行划分 2/2 向下取整为 1,进行元素的比较最终得出排序结果。

3.实现代码

/**
 * 希尔排序,按照基数进行排序
 */
public class ShellSort {

    public static void main(String[] args) {
        int data[] = new int[]{49, 38, 65, 97, 76, 13, 27, 49, 55, 4, 91};

        int temp;
        int a = 0;
        for (int gap = data.length/2; gap > 0; gap/=2){
            for (int i = gap; i < data.length; i++){
                temp = data[i];
                int j;
                for (j = i; j >= gap && data[j-gap] > temp;j-=gap){
                    data[j] = data[j-gap];
                }
                data[j] = temp;
            }
            a++;
            System.out.format("第 %d 趟: \t", a);
            printPart(data, 0, data.length - 1);
        }
    }

    // 打印序列
    static void printPart(int[] list, int begin, int end) {
        for (int i = 0; i < begin; i++) {
            System.out.print("\t");
        }
        for (int i = begin; i <= end; i++) {
            System.out.print(list[i] + "\t");
        }
        System.out.println();
    }
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值