当前位置: 首页 > news >正文

算法导论学习补充——希尔排序

/**
 * 希尔排序思想:先将整个待排记录序列分割成若干子序列分别进行直接插入排序,
 * 待整个序列中的记录“基本有序”时,再对全体记录进行一次直接插入排序
 * 希尔排序时间复杂度为O(n^3/2)
 *
 */
public class ShellSort {

    /**
     * 以d为增量对数组arr分割成子序列,并对各子序列进行直接插入排序,如果把d换为1则是直接插入排序算法
     * @param arr 要排序的数组
     * @param d  增量
     */
    static void shellInsert(int arr[],int d){        
        //由于数组是从0下标开始,所以0+d为增量后的第一个元素
        for(int i = d;i<arr.length;i++){
            if(arr[i]<arr[i-d]){
                int temp = arr[i];
                int j = i-d;
                for(;j>=0&&temp<arr[j];j-=d){
                    arr[j+d] = arr[j];
                }
                arr[j+d] = temp;
            }
        }
    }
    /**
     * 外层排序算法
     * @param arr 要排序的数组
     * @param dl  增量数组,每次按照增量分割子序列进行排序,增量数组中最后一个必须为1
     */
    static void shellSort(int arr[],int dl[]){
        for(int i = 0;i<dl.length;i++){
            shellInsert(arr,dl[i]);
            System.out.println("第"+(i+1)+"趟排序结果:");
            for(int j = 0;j<arr.length;j++)
                System.out.println(arr[j]);
        }
    }
    //测试.....
    public static void main(String[] args) {
        int arr[] = {49,38,65,97,76,13,27,49,55,4};
        int dl[] = {5,3,1};
        shellSort(arr,dl);
        System.out.println("排序结果为:");
        for(int i = 0;i<arr.length;i++)
            System.out.println(arr[i]);
    }
}


相关文章:

  • java虚拟机学习笔记——java虚拟机内部体系概述(第五章)
  • java虚拟机学习笔记——java class文件的内容(第六章)
  • 《java jdk7学习笔记》之java三大平台
  • java类的装入
  • LR常用函数以及调用自定义函数
  • java类加载器体系结构
  • MySQL 导入数据
  • java虚拟机学习笔记——类型和对象的生命周期(第七章)
  • jQuery中的100个技巧(译)
  • 子类为什么不能重写父类的静态方法
  • 15.6.6 Configuring Thread Concurrency for InnoDB
  • java虚拟机学习笔记——连接模型(第八章)
  • JVM垃圾回收机制算法总结
  • java内存模型
  • 表单样式简单设计
  • Angular4 模板式表单用法以及验证
  • crontab执行失败的多种原因
  • css选择器
  • JavaScript DOM 10 - 滚动
  • Java编程基础24——递归练习
  • Java新版本的开发已正式进入轨道,版本号18.3
  • jQuery(一)
  • Js基础知识(一) - 变量
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • scala基础语法(二)
  • 彻底搞懂浏览器Event-loop
  • 多线程 start 和 run 方法到底有什么区别?
  • 普通函数和构造函数的区别
  • 小程序开发之路(一)
  • 学习ES6 变量的解构赋值
  • python最赚钱的4个方向,你最心动的是哪个?
  • 大数据全解:定义、价值及挑战
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​LeetCode解法汇总1276. 不浪费原料的汉堡制作方案
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​软考-高级-系统架构设计师教程(清华第2版)【第20章 系统架构设计师论文写作要点(P717~728)-思维导图】​
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #NOIP 2014# day.1 T3 飞扬的小鸟 bird
  • #设计模式#4.6 Flyweight(享元) 对象结构型模式
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • $().each和$.each的区别
  • (2)MFC+openGL单文档框架glFrame
  • (HAL库版)freeRTOS移植STMF103
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (四)【Jmeter】 JMeter的界面布局与组件概述
  • (推荐)叮当——中文语音对话机器人
  • (转)Android学习笔记 --- android任务栈和启动模式
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • .net core 微服务_.NET Core 3.0中用 Code-First 方式创建 gRPC 服务与客户端
  • .NET Core使用NPOI导出复杂,美观的Excel详解
  • .NET 应用架构指导 V2 学习笔记(一) 软件架构的关键原则
  • .NET基础篇——反射的奥妙
  • @RequestParam详解