希尔排序

希尔排序

希尔排序是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。

/**
 * 希尔排序
 * 希尔排序是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序
 */
public class ShellSort {

    /**
     * 算法描述:
     * 1.首先它把较大的数据集合分割成若干个小组(逻辑上分组),然后对每一个小组分别进行插入排序,此时,插入排序所作用的数据量比较小(每一个小组),插入的效率比较高
     * 2.每个分组进行插入排序后,各个分组就变成了有序的了(整体不一定有序)
     * 3.然后缩小增量为上个增量的一半,继续划分分组,此时,每个分组元素个数多了,但是,数组变的部分有序了,插入排序效率同样比高
     * 4.同理对每个分组进行排序(插入排序),使其每个分组各自有序
     * 5.重复3~4当增量减至1时,整个数组被分为一组,此时,整个数组已经接近有序了,插入排序效率高
     * @param args
     */
    public static void main(String args[]) {
        int[] arr = {11, 6, 2, 7, 23,7, 8, 3, 9, 12, 0,27};
        int length = arr.length;

        System.out.print("排序前---------------------:");
        printArr(arr);

        int second = 1;
        //进行分组,最开始时增量(gap)为数组长度的一半
        for(int gap = length/2; gap > 0;gap /= 2){
            //对个分组进行插入排序
            for(int i=gap;i<length;i++){
                int j = i;
                int current = arr[i];
                while(j-gap>=0 && arr[j-gap]>current){
                    arr[j] = arr[j-gap];
                    j = j-gap;
                }
                arr[j] = current;
            }

            System.out.print("第"+second+"次分组,增量为:"+gap+"排序结果:");
            printArr(arr);

        }
    }

    /**
     * 输出排序结果
     * @param arr
     */
    private static void printArr(int[] arr){
        for(int i=0;i<arr.length;i++) {
            System.out.print(arr[i]+",");
        }
        System.out.println();
    }
}

执行过程
排序前------------------------------:11,6,2,7,23,7,8,3,9,12,0,27,
第1次分组,增量为:6排序结果:8,3,2,7,0,7,11,6,9,12,23,27,
第1次分组,增量为:3排序结果:7,0,2,8,3,7,11,6,9,12,23,27,
第1次分组,增量为:1排序结果:0,2,3,6,7,7,8,9,11,12,23,27,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值