Java排序算法之希尔(Shell)排序
基本思想:
希尔排序就是对直接插入排序的一个优化。现在有一个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)排序相关推荐
- 排序算法之希尔(Shell)排序(C/C++实现)
void ShellSort(int arr[], int length) {int increasement = length;int i, j, k;do{// 确定分组的增量increaseme ...
- 排序算法系列:Shell 排序算法
概述 希尔排序(Shell Sort)是 D.L.Shell 于 1959 年提出来的一种排序算法,在这之前排序算法的时间复杂度基本都是 O(n2n^{2}n2) 的,希尔排序算法是突破这个时间复杂度 ...
- JAVA排序算法之希尔排序
基本介绍 希尔排序是希尔(Donald Shell)于 1959 年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序法基本思 ...
- 排序算法之希尔排序(Java实现)
希尔排序介绍 希尔排序是希尔(Donald Shell)于1959年提出的一种排序算法.希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序. 希尔排序基本思想 ...
- 排序算法 | 希尔shell排序,算法的图解、实现、复杂度和稳定性分析
希尔shell排序 1.希尔排序--定义 2.希尔排序--步骤描述 3.希尔排序--算法实现 4.希尔排序--复杂度.稳定性分析 1.希尔排序--定义 希尔排序按其设计者希尔(Donald Shell ...
- 经典排序算法之希尔排序
排序:希尔排序(算法) 一.简介 希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序. 希尔排序是非稳定排序算法. 希尔排序因DL.Shell于1959 ...
- 常见排序算法:希尔排序
为什么80%的码农都做不了架构师?>>> 希尔排序(Shell's sort)是一种非常"神奇"的排序算法.说它"神奇",是因为没有任何 ...
- java 奇偶数据排序算法,简单讲解奇偶排序算法及在Java数组中的实现
简单讲解奇偶排序算法及在Java数组中的实现 奇偶排序是一个比较有个性的排序,基本思路是奇数列排一趟序,偶数列排一趟序,再奇数排,再偶数排,直到全部有序 举例吧, 待排数组 [6 2 4 1 5 9] ...
- php取名字算法,JavaScript排序算法之希尔排序的2个实例_基础知识
插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率. 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位. 希尔排序按其设计者希尔(Donald Shell)的 ...
最新文章
- python补全插件
- scrapy需要的xpath知识点
- Java click传递变量,Java-OnClickListener中的最终变量要求
- log4j日志输出配置
- 预处理命令之条件编译(#ifdef,#endif,#else)
- [原创]桓泽学音频编解码(14):AC3 时频转换模块算法分析
- yuv 420 mp4 flv 视频与acc 各类音视频测试下载地址
- Mybatis-代码走查问题整理
- 一文看尽 CVPR 2022 最新 20 篇 Oral 论文
- 如何用python查看pyc文件_如何理解.pyc文件内容
- Android SDK 2.1 下载与安装教程
- 关于 iOS 游戏发展趋势的思考
- 大数据告诉你何时何地买手机最划算!
- Android开发板
- 线性代数 |矩阵【运算、逆、转置】
- java pattern类使用说明(正则表达式)
- python中的ddt用法
- 团队管理23--绩效管理
- 校园一卡通服务器系统,校园一卡通系统服务器数据库安全策略研究与设计
- 涨姿势 | 一文说透电机控制器硬件在环测试(MCU HIL)