希尔排序

希尔排序就是针对直接插入排序的优化

插入排序在近乎有序的数组上性能·非常好或者在小数据规模的集合中性能也很好

于是先将数组调整得近乎有序,然后使用插入排序--------希尔排序的核心思想!!!
具体操作
先选定一个整数(gap)分组(所有距离为gap的元素在同一组),对同一组元素进行排序。不断缩小这个gap的长度(gap/=2,gap/=3)重复上述分组与排序过程,当gap==1时,其实整个数组已经近乎有序了,最后再来一次全组的插入排序整个集合就变得有序了。
注意:(gap/=2,gap/=3):是经过论证得来的并不是随便写的

 public static void shellSort(int[] arr) {int gap = arr.length >> 1;// 当gap > 1都是分组,组内进行排序while (gap > 1) {// 组内进行插入排序insertionSortByGap(arr,gap);gap = gap >> 1;}// 当gap == 1时,其实整个数组近乎有序,整体来一次插入排序即可insertionSortByGap(arr,1);}private static void insertionSortByGap(int[] arr, int gap) {for (int i = gap; i < arr.length; i++) {// j和j - gap是同一组的元素,利用gap这个值来进行分组的for (int j = i; j - gap >= 0 && arr[j] < arr[j - gap]; j -= gap) {swap(arr,j,j - gap);}}}public static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}

希尔排序的本质:普通的插入排序,每次向前看一个元素
按照gap分组的插入排序,每次向前看gap步的元素,j-jap和j才是同一组元素
如果gap==1,就变成了普通的插入排序!!!!

七大排序----SevenSort(希尔排序)相关推荐

  1. 经典排序算法 - 希尔排序Shell sort

    经典排序算法 - 希尔排序Shell sort 希尔排序Shell Sort是基于插入排序的一种改进,同样分成两部分, 第一部分,希尔排序介绍 第二部分,如何选取关键字,选取关键字是希尔排序的关键 第 ...

  2. 用python写希尔排序_python希尔排序介绍(实例)

    希尔排序介绍 希尔排序(Shell Sort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个&qu ...

  3. 数据结构 排序(希尔排序)

    //希尔排序法--插入排序升级版 #include<stdio.h> #include<stdlib.h> #include<string.h> #include& ...

  4. 《Algorithm算法》笔记:元素排序(2)——希尔排序

    <Algorithm算法>笔记:元素排序(2)--希尔排序 Algorithm算法笔记元素排序2希尔排序 希尔排序思想 为什么是插入排序 h的确定方法 希尔排序的特点 代码 有关排序的介绍 ...

  5. 排序算法:冒泡排序、插入排序、选择排序、希尔排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.冒泡排序: 1.算法原理: 冒 ...

  6. java希尔排序_java_java高级排序之希尔排序,希尔排序对于多达几千个数据 - phpStudy...

    java高级排序之希尔排序 希尔排序对于多达几千个数据项的,中等大小规模的数组排序表现良好,希尔排序不像快速排序和其它时间复杂度为O(n*logn)的排序算法那么快,因此,对非常大的文件排序,它不是最 ...

  7. 【排序算法】冒泡排序|选择排序|插入排序|希尔排序

    文章目录 冒泡排序 选择排序 插入排序 希尔排序 冒泡排序   第一个元素开始向第二个元素比较,若大于则交换位置,不大于则不动.然后第二个元素和第三个元素比较,再然后第三个元素和第四个元素比较-一直比 ...

  8. 排序算法——希尔排序的图解、代码实现以及时间复杂度分析

    希尔排序(Shellsort) 希尔排序是冲破二次时间屏障的第一批算法之一. 希尔排序通过比较相距一定间隔的元素来工作:各躺比较所用的距离随着算法的进行而减小,直到只比较相邻元素的最后一趟排序为止.由 ...

  9. 冒泡排序、插入排序、选择排序、希尔排序、堆排序、归并排序等常用排序算法的比较

    掌握好常用的排序算法,在实际的项目开发中可以节省很多的时间.每一种排序算法在执行的效率上是存在差别的,这些微小的时间差,也许在平常的联系当中感觉不到,但是涉及到数据量比较大或者是在资源比较紧张的系统中 ...

  10. python排序算法——希尔排序(附代码)

    python排序算法--希尔排序 文章目录 python排序算法--希尔排序 一.前言 二.算法描述 三.代码实现 总结 一.前言 相关知识来自<python算法设计与分析>.初级排序算法 ...

最新文章

  1. 未来农业科技:物联网如何阻止全球粮荒
  2. 主流WEB开发语言简单对比(转)
  3. 大型三甲医院管理系统源码PACS超声科室源码DICOM影像工作站
  4. spring事务三大接口
  5. linux下usb调试工具,LINUX USB调试
  6. 提高数据库处理查询速度
  7. window难以实现的linux,工欲善其事必先利其器--几步实现window与linux之间的文件共享...
  8. mybatis使用详解
  9. 用vue实时监听多个用户扫描二维码
  10. Book-Manager 图书管理系统(基于SpringBoot、MyBatis)
  11. Linux僵尸进程详解
  12. 计算机应用画画教程,小学生信息技术之电脑绘画教学
  13. Python语言程序设计基础_实验3 流程控制I_答案_通识教育必修课程_上海师范大学
  14. tar: R-4.1.0.tar.gz: Cannot read: Is a directory tar: At beginning of tape, quitting now tar: Error
  15. 有米科技股份有限公司
  16. C语言Matrix编程题——[Recursion]D. Liang 8.1 Computing factorials
  17. 黑马JAVA P104 继承后构造器的特点、this、super使用总结
  18. 树的遍历(Java)
  19. 如何更改音频格式?分享这几个简单的转换方法给你
  20. 帝国时代3手机单机版java_帝国时代3手游单机版

热门文章

  1. 洛谷-4735 最大异或和 /【模板】可持久化Trie
  2. 08-认识margin
  3. 《域渗透攻防指南》签名版预售来啦
  4. Vue 项目中实现的微信、微博、QQ空间分享功能(亲测有效)
  5. Android高德地图试用
  6. OutLook Express关联QQ邮箱
  7. 卷积神经网络及其在图像处理中的应用
  8. Flash Switcher(一) - 快捷Tab切换器
  9. 驰骋BPM系统-表单引擎-流程引擎 2020年大换装
  10. 马哥2016linux就业班+架构班+运维班全套