[基本的想法]

将原本有大量记录数的记录进行分组。切割成若干个子序列,此时每一个子序列待排序的记录个数就比較少了,然后在这些子序列内分别进行直接插入排序,当整个序列都基本有序时。再对全体记录进行一次直接插入排序。

所谓的基本有序,就是小的keyword基本在前面,大的基本在后面,不大不小的基本在中间。像{2, 1, 3, 6, 4, 7, 5, 8, 9}这样能够称为基本有序了。

[java实现]

public class ShellSort {public static void main(String[] args) {int[] arr = { 6, 5, 3, 1, 8, 7, 2, 4 };System.out.println("排序之前:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}// 希尔排序shellSort(arr);System.out.println();System.out.println("排序之后:");for (int i = 0; i < arr.length; i++) {System.out.print(arr[i] + " ");}}/*** 希尔排序*/private static void shellSort(int[] arr) {int j;for (int gap = arr.length / 2; gap > 0; gap = gap / 2) {for (int i = gap; i < arr.length; i++) {int tmp = arr[i];for (j = i; j >= gap && tmp < arr[j - gap]; j = j - gap) {arr[j] = arr[j - gap];}arr[j] = tmp;}}}}

[算法说明]

希尔排序时间复杂度:O(nlogn)

Shell排序是不是一个稳定的排序算法。

版权声明:本文博客原创文章。博客,未经同意,不得转载。

Java排序算法(四):Shell排序相关推荐

  1. Java常见排序算法之Shell排序

    在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...

  2. 排序算法之shell排序

    关于shell排序算法的介绍参见: ​​​​​​图解排序算法(二)之希尔排序 - dreamcatcher-cx - 博客园 书中3.5节中关于shell排序的实现如下: void shellsort ...

  3. 排序算法 | 希尔shell排序,算法的图解、实现、复杂度和稳定性分析

    希尔shell排序 1.希尔排序--定义 2.希尔排序--步骤描述 3.希尔排序--算法实现 4.希尔排序--复杂度.稳定性分析 1.希尔排序--定义 希尔排序按其设计者希尔(Donald Shell ...

  4. Java排序算法之——希尔排序

    算法简述 希尔排序也叫作shell排序或缩小增量排序,据说是一个叫D.L.Shell的人发明出来的,顾取名shell排序.这种排序是基于插入排序思想的,也比较适用于数据量大时. 我刚开始看到时候对于插 ...

  5. 图解排序算法(四)之归并排序

    图解排序算法(四)之归并排序 基本思想 归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divide) ...

  6. JAVA排序算法之希尔排序

    基本介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序法基本思 ...

  7. java排序算法 sort_Java排序算法之SleepSort排序示例

    本文实例讲述了Java排序算法之SleepSort排序.分享给大家供大家参考,具体如下: 分享一个很有创意的排序算法:sleepSort .巧妙利用了线程的sleep(),代码如下: public c ...

  8. 排序算法之希尔排序(Java实现)

    希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...

  9. Java经典排序算法:选择排序,动图演示排序过程

    Java经典排序算法:选择排序,动图演示排序过程 示意动图: public class Main {public static void main(String[] args) {new Main() ...

  10. 排序---初级排序算法(选择排序、插入排序和希尔排序)

    写在前面的话: 一枚自学Java和算法的工科妹子. 算法学习书目:算法(第四版) Robert Sedgewick 算法视频教程:Coursera  Algorithms Part1&2 本文 ...

最新文章

  1. socket可能造成阻塞的函数有:connect()、accept()、读写函数、select()、poll()、gethostbyname()等
  2. 基于python和postgreSQL存储图片
  3. 亚马逊抢甲骨文的 Java 饭碗,推出 Corretto
  4. JSTL标签显示动态控件
  5. 【阿里云课程】卷积神经网络:结构单元、卷积层反向传播求解与典型模型
  6. php+gd库的源码安装
  7. python 给文本加下划线_untiy3dUGUI实现text文本下划线
  8. 水经注叠加cad_水经注CAD智能影像加载插件使用教程
  9. Nacos注册中心AP架构源码(Distro)上篇
  10. unity 局域网读取文件_C#读写局域网共享文件夹文件
  11. Google邮箱账号登陆存在异常活动怎么办?
  12. epsfallback_EPS网络CS Fallback技术研究
  13. nyoj 一笔画问题
  14. MIDI 音乐程序设计 (可以自己编曲的快乐)
  15. luogu P2698 [USACO12MAR]花盆Flowerpot
  16. 征信与风控,这两者千万别搞混了
  17. #(三)、波向二维的数学转化
  18. 产品发布新闻稿撰写:介绍产品的新闻稿怎么写?
  19. ubuntu ip地址修改
  20. Vue前端页面跳转,登录成功跳转页面

热门文章

  1. bzoj2038 [2009国家集训队]小Z的袜子(hose)
  2. php SNMP函数时出错
  3. Hibernate - Query简易
  4. CodeForces 746D Green and Black Tea 有坑
  5. SQL拼接自己需要的字符串
  6. 大学生恋爱交友软件03(小幸运)——痛点分析
  7. python爬虫:爬取医药数据库drugbank
  8. c++ 覆盖、重载与隐藏
  9. Extjs项目实战视频教程
  10. HTML点击按钮弹出颜色选择器,css如何实现按钮点击与松开颜色不同?