1. 希尔排序:1959年Shell发明,第一个突破O(n^2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。

2. 希尔排序的时间,空间复杂度及稳定性:

        1>. 时间复杂度:O(n^1.3);虽然我们这里希尔排序的过程中会出现了三层循环的嵌套,但是通过某些算法最后计算得出希尔排序的时间复杂度为O(n^1.3)。

        2>. 空间复杂度:S(1);因为我们在希尔排序时是对原数组进行直接排序,并没有其他创建新的数组。

        3>. 稳定性: 不稳定;因为我们在希尔排序时,出现了大跨度的交换元素。
3. 我们可以创建一个父类:父类中封装数组的创建,排序,交换位置等方法,其他的排序方法的类都继承于这个父类,重写父类中的方法。

public abstract class Sort {public int[] arr;public Sort(){};//有参构造方法 创建一个数组的副本public Sort(int[] arr){this.arr = new int[arr.length];for(int i = 0; i < arr.length; i++){this.arr[i] = arr[i];}}//对数组进行排序public abstract void sort(int[] arr);//交换数据位置public void swap(int[] arr, int i, int j){int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}
}

4. 希尔排序的过程:

//希尔排序 时间复杂度为:O(n^1.3) 空间复杂度为:S(1) 算法稳定性:不稳定
/** 希尔排序类似于插入排序 但是希尔排序是通过分组来进行遍历的* 组gep从数组长度的一半开始 每轮gep都是上一轮的一半(也可以是上一轮减1 等等 只要是向下缩小就可以) 直至gep==0* 外层循环i每次从gep开始 向后遍历* 内层循环j从i开始 向前移 但是是按照[j-gep, j]这个区间移动(即j每次前移到j-gep的位置 j-gep前移到j-2gep的位置) 直至j-gep==0 或者 arr[j-gep]>arr[i]* 交换j-gep和i位置的值*/
public class ShellSort extends Sort{public ShellSort(int[] arr){super(arr);}@Overridepublic void sort(int[] arr) {int len = arr.length;//循环更新组的大小 步长为上一个组的一半 直到组等于0为止for(int gap = len / 2; gap > 0; gap = gap / 2){//外层循环i每次从gep开始 向后遍历for(int i = gap; i < arr.length; i++){int e = arr[i];int j = i;//1.如果满足条件(j - gep >= 0 && arr[j - gep] > e) 就将j - gep的值赋值为j位置while (j - gap >= 0 && arr[j - gap] > e){arr[j] = arr[j - gap];j = j - gap;}//2.循环结束后 将e的值赋值到j的位置//1,2两步相当于是交换j - gep位置的值和e的位置arr[j] = e;}}System.out.println(Arrays.toString(arr)); //打印排序后的数组}
}

5. 测试类:测试类中只测试排序方法是否能成功。

public class TestSort {public static void main(String[] args) {int[] arr = {9, 5, 4, 6, 7, 2, 1, 3, 8, 10};ShellSort shellSort = new ShellSort(arr);shellSort.sort(arr);}
}

排序算法----希尔排序相关推荐

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

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

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

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

  3. 十大经典排序算法-希尔排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

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

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

  5. 排序算法——希尔排序(缩小增量排序)

    1.希尔排序思想: 希尔排序就是把数据分成若干份子序列,从第一个元素开始,和每间隔为n的元素分成一个子序列,对每一份子序列实行直接插入排序,然后合并成一个新序列,继续对新序列以间隔m分成若干份,继续重 ...

  6. 希尔排序是一种稳定的排序算法_十大经典排序算法——希尔排序

    vs code ppt c++/java 目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的 ...

  7. 希尔排序是一种稳定的排序算法_排序算法—希尔排序

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

  8. ds排序--希尔排序_排序算法 - 希尔排序分析及优化

    希尔排序 1 算法思想 希尔排序,也被称为递减增量排序,是简单插入排序的一种改进版本. 在插入排序中,如果待排序列中的某个元素,距离有序数列中待插入位置非常远,就需要比较很多次才可以到达插入位置,这是 ...

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

    希尔排序是1959 年由D.L.Shell提出来的,相对直接排序有较大的改进.希尔排序又叫缩小增量排序 基本思想 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录&q ...

最新文章

  1. C#开发Unity游戏教程循环遍历做出判断及Unity游戏示例
  2. 关于mysql中truncate
  3. 输入对话框 android,android 输入对话框 确认对话框
  4. 【Prometheus】prometheus生成快照,并冷备份数据,恢复数据
  5. ORACLE同义词源库锁表导致目标库删除操作报ora 02055 02049 02063 06512
  6. 《剑指offer》答案整理
  7. 川大计算机高考分数,2020年四川大学录取分数是多少 2020年高考多少分可以报考四川大学...
  8. Java Enumeration接口与Iterator接口
  9. ejb生命周期_EJB 3.x:生命周期和并发模型(第1部分)
  10. 全网都在看的Jmeter精选原创文章
  11. JAVA:基础递归算法大杂烩
  12. 将Maven集成到idea中并创建第一个Maven项目
  13. 猎豹移动傅盛:区块链将重塑整个社会关系,CEO恐将职位不保
  14. Eclipse用法和技巧五:生成说明文档2
  15. MVC 打印解决方案--SNF快速开发平台3.1
  16. 双十一大战收官:荣耀反超苹果,以新思维新模式傲视群雄
  17. 百度地图手机端单触点单击和长按事件,解决部分手机(小米手机)地图单击事件失效,多触点、拖动依然触发长按的bug...
  18. VTM10.0代码学习18:xCheckRDCostMerge2Nx2N()
  19. 窄带包络解调python实现_对数据包络分析法DEA的再理解,以及python 实现
  20. 测试按键延迟软件,怎么测试键盘延迟-灵猫键盘DIY大师测试键盘响应速度的方法 - 河东软件园...

热门文章

  1. python代码写名字_python代码实现给儿子儿女取名字
  2. 启辰r30近光灯远光灯保险盒,近光灯故障处理
  3. git命令移动文件夹到另一文件夹
  4. 【文献阅读】医学图像分割中的loss函数选择-Loss odyssey in medical image segmentation loss
  5. 曾被诉“抄袭”,头条搜索想要突围有点难
  6. 高级验证方法学()-Mentor-笔记
  7. 批量识别图片中文字(python、百度开发者工具)
  8. C/C++在线餐馆预订管理系统
  9. SAE J3016 自动驾驶分级定义 2021年4月更新
  10. javax.el.PropertyNotFoundException: 'newsLine' is an unknown bean property...