基本思想:

希尔排序就是对直接插入排序的一个优化。现在有一个array,希尔排序就是设定一个增量incrementNum(0<incrementNum<array.length)。先从array[0]开始,以incrementNum为增量的进行直接插入排序,直到数组末尾,然后从array[1]开始重复:以incrementNum为增量的进行直接插入排序; 然后从array[1]开始重复......一直到array[n]。然后取一个小于上一步增量的新的增量(比如设置为incrementNum/2),对前一个步骤的结果array进行遍历,直接插入排序....,再取小于上一步增量的新的增量,重复进行:遍历,直接插入排序直到新的增量小于1之后再退出循环。

过程:

图片来自:http://www.cnblogs.com/jingmoxukong/p/4303279.html

Java代码实现:

public class Xier {public static void Shellsort(int[] arrays){if(arrays == null || arrays.length <= 1){return;}//增量int incrementNum = arrays.length/2;while(incrementNum >=1){for(int i=0;i<arrays.length;i++){//进行插入排序for(int j=i;j<arrays.length-incrementNum;j=j+incrementNum){if(arrays[j]>arrays[j+incrementNum]){int temple = arrays[j];arrays[j] = arrays[j+incrementNum];arrays[j+incrementNum] = temple;}}}//设置新的增量incrementNum = incrementNum/2;System.out.println(Arrays.toString(arrays));}}public static void main(String[] args) {int[] a = { 57, 68, 59, 52, 72, 28, 96, 33 };Xier.Shellsort(a);}
}

算法性能分析:

时间复杂度:最坏情况下为O(n^2),平均时间复杂度为O(nlogn)

空间复杂度:归并排序需要一个大小为1的临时存储空间用以保存合并序列,所以空间复杂度为O(1)

算法稳定性:从上面图片中可以看出,数字5在排序后交换了位置,所以它是不稳定的算法。

转载于:https://www.cnblogs.com/love-Stefanie/p/6743931.html

Java排序算法之希尔(Shell)排序相关推荐

  1. 排序算法之希尔(Shell)排序(C/C++实现)

    void ShellSort(int arr[], int length) {int increasement = length;int i, j, k;do{// 确定分组的增量increaseme ...

  2. 排序算法系列:Shell 排序算法

    概述 希尔排序(Shell Sort)是 D.L.Shell 于 1959 年提出来的一种排序算法,在这之前排序算法的时间复杂度基本都是 O(n2n^{2}n2) 的,希尔排序算法是突破这个时间复杂度 ...

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

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

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

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

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

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

  6. 经典排序算法之希尔排序

    排序:希尔排序(算法) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序. 希尔排序是非稳定排序算法. 希尔排序因DL.Shell于1959 ...

  7. 常见排序算法:希尔排序

    为什么80%的码农都做不了架构师?>>>    希尔排序(Shell's sort)是一种非常"神奇"的排序算法.说它"神奇",是因为没有任何 ...

  8. java 奇偶数据排序算法,简单讲解奇偶排序算法及在Java数组中的实现

    简单讲解奇偶排序算法及在Java数组中的实现 奇偶排序是一个比较有个性的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序 举例吧, 待排数组 [6 2 4 1 5 9] ...

  9. php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识

    插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...

最新文章

  1. python补全插件
  2. scrapy需要的xpath知识点
  3. Java click传递变量,Java-OnClickListener中的最终变量要求
  4. log4j日志输出配置
  5. 预处理命令之条件编译(#ifdef,#endif,#else)
  6. [原创]桓泽学音频编解码(14):AC3 时频转换模块算法分析
  7. yuv 420 mp4 flv 视频与acc 各类音视频测试下载地址
  8. Mybatis-代码走查问题整理
  9. 一文看尽 CVPR 2022 最新 20 篇 Oral 论文
  10. 如何用python查看pyc文件_如何理解.pyc文件内容
  11. Android SDK 2.1 下载与安装教程
  12. 关于 iOS 游戏发展趋势的思考
  13. 大数据告诉你何时何地买手机最划算!
  14. Android开发板
  15. 线性代数 |矩阵【运算、逆、转置】
  16. java pattern类使用说明(正则表达式)
  17. python中的ddt用法
  18. 团队管理23--绩效管理
  19. 校园一卡通服务器系统,校园一卡通系统服务器数据库安全策略研究与设计
  20. 涨姿势 | 一文说透电机控制器硬件在环测试(MCU HIL)

热门文章

  1. ctfshow-萌新-web5( 利用位运算符控制SQL获取网站敏感信息)
  2. 数据库不可重复读和幻读的区别
  3. Python中文件的读写、写读和追加写读三种模式的特点
  4. 微信小程序-测试游戏生成六边多边形
  5. 跟从内心,无问东西------观影《无问东西》
  6. 【Python】极简单的方式序列化sqlalchemy结果集为JSON
  7. pg_restore使用
  8. 从输入URL到页面加载完成的过程中都发生了什么事情?
  9. ContentProvider中gettype() 和MIME类型的理解
  10. 构建高可用linux和鸟哥,构建高可用Linux服务器