希尔排序概述: 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。

  • 选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1
  • 按增量序列个数 k,对序列进行 k 趟排序
  • 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。
 public class ArrayDemo {/*希尔排序:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录"基本有序"时,再对全体记录进行依次直接插入排序。 */public static void main(String[] args) {//定义一个数组int[] arr = {24, 69, 80, 57, 13};System.out.println("排序前:" + arrayToString(arr));int gap = 1;while (gap < arr.length) {gap = gap * 3 + 1;}while (gap > 0) {for (int i = gap; i < arr.length; i++) {int tmp = arr[i];int j = i - gap;while (j >= 0 && arr[j] > tmp) {arr[j + gap] = arr[j];j -= gap;}arr[j + gap] = tmp;}gap = (int) Math.floor(gap / 3);}System.out.println("排序后:" + arrayToString(arr));}//把数组中的元素按照指定的规则组成一个字符串:[元素1, 元素2, ...]public static String arrayToString(int[] arr) {StringBuilder sb = new StringBuilder();sb.append("[");for (int i = 0; i < arr.length; i++) {if (i == arr.length - 1) {sb.append(arr[i]);} else {sb.append(arr[i]).append(", ");}}sb.append("]");String s = sb.toString();return s;}}

输出结果

【十大经典排序算法】java实现--希尔排序(4)相关推荐

  1. 【十大经典数据挖掘算法】k-means

    [十大经典数据挖掘算法]k-means https://mp.weixin.qq.com/s/SWlE-KBJ4mVza92nJFX1hg 作者简介: Treant  人工智能爱好者社区专栏作者 博客 ...

  2. 【十大经典数据挖掘算法】Naïve Bayes

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 朴素贝叶斯(Naïve Bayes) ...

  3. 【十大经典数据挖掘算法】C4.5

    [十大经典数据挖掘算法]系列 C4.5 K-Means SVM Apriori EM PageRank AdaBoost kNN Naïve Bayes CART 1. 决策树模型与学习 决策树(de ...

  4. 【十大经典数据挖掘算法】PageRank

    作者简介: Treant 人工智能爱好者社区专栏作者 博客专栏:https://www.cnblogs.com/en-heng 引言 PageRank是Sergey Brin与Larry Page于1 ...

  5. 十大经典数据挖掘算法:SVM

    作者简介: Treant 人工智能爱好者社区专栏作者 博客专栏:https://www.cnblogs.com/en-heng SVM(Support Vector Machines)是分类算法中应用 ...

  6. js排序算法详解-希尔排序

    全栈工程师开发手册 (作者:栾鹏) js系列教程5-数据结构和算法全解 js排序算法详解-希尔排序 希尔排序,直接上图: 像这个算法看图理解起来并不是很难,就像比赛一样,1-6一组,2-7一组,每差5 ...

  7. 图解十大经典机器学习算法入门

    弱人工智能近几年取得了重大突破,悄然间,已经成为每个人生活中必不可少的一部分.以我们的智能手机为例,看看到底温藏着多少人工智能的神奇魔术. 下图是一部典型的智能手机上安装的一些常见应用程序,可能很多人 ...

  8. 希尔排序是一种稳定的排序算法_全面解析十大排序算法之四:希尔排序

    点击上方蓝字关注我们吧 1. 十种排序算法的复杂度和稳定性 时间复杂度:一个算法消耗所需要的时间 空间复杂度:运行一个算法所需要的内存时间 稳定性:如一个排列数组:1.4.5.6.4.7. 此时有一对 ...

  9. 排序算法研究之希尔排序(shell sort)

    前面几个小节,我们分别介绍了冒泡排序,插入排序,直接快速排序 ,选择排序本节,我们介绍插入排序的改进版的希尔排序. 希尔排序是1959年,Shell发明的,这是第一个突破O(n2)的排序算法,他与直接 ...

  10. 排序算法java源代码_排序算法汇总(java实现,附源代码)

    整理系统的时候发现了原来写的各种算法的总结,看了一下,大吃一惊,那时候的我还如此用心,具体的算法,有的已经模糊甚至忘记了,看的时候就把内容整理出来,顺便在熟悉一下,以后需要的时候就可以直接过来摘抄了. ...

最新文章

  1. 穿着健美裤的美女,她们身材好是锻炼出来的
  2. 如何在SAP云平台Neo环境里进行workflow(工作流)的开发
  3. Bootstrap学习笔记(四)-----Bootstrap每天必学之表单
  4. codeforces 677A-C语言解题报告
  5. linux 中的 nohup 命令(设置后台进程): nohup: ignoring input and appending output to ‘nohup.out’
  6. ES 必备插件的安装
  7. 【华为云技术分享】直播回顾丨激发数据裂变新动能,HDC.Cloud云数据库前沿技术解读
  8. excel服务器正在配置文件,excel2007取消正在配置进度的方法
  9. opencv学习笔记三十二:Haar特征与积分图像
  10. Excel学习 -- 函数基础
  11. java公众号图片上传_调用微信公众号接口上传图片素材
  12. python统计英语单词出现次数
  13. uniapp获取云服务空间 数据
  14. linux raid5热备,有热备盘的服务器RAID-5数据恢复实例
  15. 02-CSS基础与进阶-day5_2018-09-03-21-41-57
  16. jQuery伪类选择器
  17. java并发编程实战wwj----------------------第二阶段-------读写锁-------16-17-18
  18. 洛谷P3406 海底高铁题解
  19. 分布式消息中间件Metaq发布1.4.3
  20. RMD kint 不输出 include=TRUE,echo=TRUE

热门文章

  1. 《Tuning I/O Performance》读后笔记
  2. openwrt开发过程简介
  3. 黑马程序员-面向对象-06天-3(static-静态代码块)
  4. Request.UrlReferrer详解
  5. .NET完全手动搭建三层B/S架构
  6. ListView的使用和数据绑定
  7. Python一些特殊用法(map、reduce、filter、lambda、列表推导式等)
  8. 树莓派学习笔记——交叉编译工具链
  9. 汇编实现地址对应值相加
  10. /proc/meminfo 学习