ZJ-013期算法:希尔排序

Posted 程序媛日常吖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZJ-013期算法:希尔排序相关的知识,希望对你有一定的参考价值。

前言:                                                     

在拿下字节跳动之前 若出现断更的情况,欢迎每一位关注的小伙伴 进群抢红包仅限断更当日【ZJ-013期】算法(五):希尔排序。加入断更红包群请关注公众号并回复:断更红包。⬇️⬇️

【ZJ-013期】算法(五):希尔排序

往期回顾:                                                

【ZJ-001期】数据结构(一):数组【ZJ-002期】数据结构(二):队列【ZJ-003期】数据结构(三):栈【ZJ-004期】数据结构(四):单链表【ZJ-005期】数据结构(五):双链表【ZJ-006期】数据结构(六):二叉树【ZJ-007期】数据结构(七):二叉搜索树【ZJ-008期】数据结构(八):二叉搜索树删除【ZJ-009期】算法(一):贪心算法【ZJ-010期】算法(二):冒泡排序【ZJ-011期】算法(三):选择排序【ZJ-012期】算法(四):插入排序


今日内容:                                                

大家好哈~~~接下来的几天是排序算法,大家可以随我看我一下噢。


【ZJ-013期】算法(五):希尔排序什么是希尔排序?

希尔排序是希尔(Donald Shell) 于1959年提出的一种排序算法。希尔排序也是一种插入排序,它是简单插入排序经过改进之后的一个更高效的版本,也称为缩小增量排序,同时该算法是冲破O(n2)的第一批算法之一。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。


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


【ZJ-013期】算法(五):希尔排序希尔排序的算法步骤是什么?

  1. 选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;

  2. 按增量序列个数k,对序列进行k 趟排序;

  3. 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。



【ZJ-013期】算法(五):希尔排序如何实现希尔排序?

public class Solution {  public static void main(String[] args) {       int[] array = new int[]{1,3,5,2,4,6,8};        int len = array.length; int temp, gap = len / 2; while (gap > 0) { for (int i = gap; i < len; i++) { temp = array[i]; int preIndex = i - gap; while (preIndex >= 0 && array[preIndex] > temp) { array[preIndex + gap] = array[preIndex]; preIndex -= gap; } array[preIndex + gap] = temp; } gap /= 2;        }                System.out.println("排列后的结果是:"); for(i = 0; i < arr.length; i++) {            System.out.print(arr[i]+",");       }    }}


希尔排序的稳定性如何?

希尔排序中相等数据可能会交换位置,所以希尔排序是不稳定的算法。


希尔排序复杂度如何?

时间复杂度:O(nlog2n)

最佳情况:T(n) = O(nlog2 n)

最坏情况:T(n) = O(nlog2 n)

平均情况:T(n) = O(nlog2n)



空间复杂度:O(1),只需要一个附加程序单元用于交换







好了,今天就到这里,感谢各位看官到这里~


以上是关于ZJ-013期算法:希尔排序的主要内容,如果未能解决你的问题,请参考以下文章

《算法》笔记 3 - 选择排序插入排序希尔排序

希尔排序图解与代码

算法-java代码实现希尔排序

希尔排序的介绍和希尔排序基本思想以及代码实现

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

排序算法之希尔排序