数据结构与算法之希尔排序


目录

  1. 希尔排序介绍
  2. 希尔排序法的示意图
  3. 代码实现

1. 希尔排序介绍

  1. 简单插入排序存在的问题:当然需要插入的数是较小的数时,后移的次数明显增加,对效率有影响。

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

  3. 希尔排序法基本思想
    希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止


2. 希尔排序法的示意图



3. 代码实现

public class ShellSort {public static void main(String[] args) {int[] arr= {8,9,1,7,2,3,5,4,6,0};System.out.println("排序前:");System.out.println(Arrays.toString(arr));shellSort(arr);System.out.println("排序后:");System.out.println(Arrays.toString(arr));}//移位法private static void shellSort(int[] arr) {//增量gap,并逐步缩小增量for (int gap = arr.length/2; gap >0 ; gap/=2) {//从第gap个元素,逐个对其所在的组进行插入for (int i = gap; i < arr.length; i++) {int j = i;int temp = arr[j];if (arr[j]< arr[j-gap]){while (j-gap >=0 && temp < arr[j-gap]){//移动arr[j] = arr[j-gap];j -= gap;}//退出while循环后,就给temp找到插入的位置arr[j] = temp;}}}}
}

编译结果

备注:执行8万条数据排序大概需要1s;

数据结构与算法之希尔排序相关推荐

  1. Java数据结构与算法(六) 希尔排序

    ###一.希尔排序的产生 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shell于1959年提 ...

  2. 在路上---学习篇(一)Python 数据结构和算法 (4) --希尔排序、归并排序

    独白: 希尔排序是经过优化的插入排序算法,之前所学的排序在空间上都是使用列表本身.而归并排序是利用增加新的空间,来换取时间复杂度的减少.这俩者理念完全不一样,注定造成的所消耗的时间不同以及空间上的不同 ...

  3. 数据结构与算法之希尔排序及其改进(可视化)

    文章目录 1 希尔排序 1.1 简介 1.2 流程 1.3 可视化 1.4 python代码实现 2 改进II:使用不同的分组方式 2.1 思路 2.2 python代码实现 3 改进III:引入插入 ...

  4. 数据结构与算法之四希尔排序法

    希尔排序法的思想是:先取一个小于数组长度n的数d1作为第一个增量,把数组里面的n个数分成d1个组,数组中所有距离为d1的数都放在同一个小组中,分组过程见下图,再在各组里进行直接插入排序,然后取第二个增 ...

  5. 【数据结构与算法】高级排序(希尔排序、归并排序、快速排序)完整思路,并用代码封装排序函数

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  6. 数据结构与算法:选择排序

    数据结构与算法:选择排序 雪柯 大工生物信息 提笔为写给奋进之人 已关注 8 人赞同了该文章 引用自算法图解,作者[美] Aditya Bhargava 译袁国忠 特别备注:本书非原创,但部分内容自己 ...

  7. python希尔排序的优缺点_Python排序搜索基本算法之希尔排序实例分析

    本文实例讲述了Python排序搜索基本算法之希尔排序.分享给大家供大家参考,具体如下: 希尔排序是插入排序的扩展,通过允许非相邻的元素进行交换来提高执行效率.希尔排序最关键的是选择步长,本程序选用Kn ...

  8. JAVA中希尔排序去的讲解_java 中基本算法之希尔排序的实例详解

    java 中基本算法之希尔排序的实例详解 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法.该方法因DL.Shel ...

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

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

最新文章

  1. 奇点、技术失控与技术启示录
  2. vCenter功能基本介绍
  3. python3.x获取windows自启动程序列表
  4. 简单易懂的多线程(通过实现Runnable接口实现多线程)
  5. Python装饰器的实现原理
  6. WordPress窗体化侧边栏
  7. CVPR2019目标分割论文推荐(附论文及代码链接)
  8. JAVA中toString方法的作用
  9. HDU2161 Primes
  10. linux移植简介[MS2]
  11. 好好工作,别想不开去创业。
  12. Spring 和 JAVA 的牵绊
  13. 如何使用python读取excel表的某一列_使用python采集Excel表中某一格数据
  14. S32K144之SDK版:CAN模块应用
  15. EPLAN P8部件库 EPLAN P8部件库,包含低压电气 控制系统设计常用品牌型号,全部部件均为本人整理自己创建,可大大提高电气控制行业同仁的工作效率!
  16. 熊猫直播:成也资本,败也资本
  17. 超详细的VMware安装openEuler21.09系统
  18. 微信小程序——选择图片/拍照
  19. 安卓pdf阅读器_电子书阅读器选哪个好?这篇文章告诉你!
  20. firebird的数据类型(datatype)

热门文章

  1. Linux系统下不同机器之间拷贝文件的方法
  2. 上海网域CEO肖确伟:IDC精细化运营探讨
  3. 20170626_oracle_数据库设计
  4. sicp第一章部分习题解答
  5. Linux 卷管理详解[ pv vg lv] —— 之三
  6. Visual Media Server – 2 - 下载模块草图
  7. HDU - 3085 Nightmare Ⅱ(双向bfs)
  8. java如果属性为空返回其他_后台返回前台数据(实体类)如果存在为空或‘’的属性,如何过滤掉...
  9. 脚注交叉引用序号不一样_期末干货|蛋黄君的论文不秃头指南
  10. 从蓝桥杯来谈Fibonacci数列