思想 希尔排序(Shell Sort)是基于插入排序的一种 不稳定 排序方法。 1,将整个序列分为h个子序列; 2,第一趟将每个子序列进行插入排序; 3,第二趟将增量缩小,重复2; 4,直至增量为1,就是简单插入排序。 eg: 实现 复杂度 希尔排序最优时间复杂度$O(n)$,最差情况下也突破了平方 ...
分类:
编程语言 时间:
2020-01-01 23:58:45
阅读次数:
147
# ShellSort希尔排序_Python实现 def shell_sort(li): n = len(li) # gap间隔为长度除2 gap = n // 2 while gap > 0: for i in range(gap, n): while i >= gap and li[i - ga ...
分类:
编程语言 时间:
2019-12-26 09:44:08
阅读次数:
99
前言: 排序算法是我们编程中遇到的最多的算法。目前主流的算法有8种。 平均时间复杂度从高到低依次是: 冒泡排序(o(n2)),选择排序(o(n2)),插入排序(o(n2)),堆排序(o(nlogn)), 归并排序(o(nlogn)),快速排序(o(nlogn)), 希尔排序(o(n1.25)),基数 ...
分类:
编程语言 时间:
2019-12-26 00:01:35
阅读次数:
88
希尔排序 希尔排序是一个叫希尔的数学家提出的一种优化版本的插入排序。 首先取一个整数d1=n//2,将元素分为d1个组,每组相邻元素之间的距离为d1,在各组内进行直接插入排序。 取第二个整数d2=d1//2,重复上述分组排序过程,直到di=1,即所有元素在同一组内进行直接插入排序。 希尔排序是使整体 ...
分类:
编程语言 时间:
2019-12-25 15:53:09
阅读次数:
72
希尔排序也叫作缩小增量排序。 希尔排序的思想就是将一个序列分为若干子序列,在子序列内部进行直接插入排序【间隔非1的】,大幅的向目标位置迈进,而不是一步一步移动,收窄增量,最终为1,最终为1 时,其实就是一次直接插入排序,不过因为序列基本有序,所以这次的直接插入排序是效率最高,整体效率就提升很多,所以 ...
分类:
编程语言 时间:
2019-12-24 11:40:31
阅读次数:
101
希尔排序: 希尔排序是对插入排序的优化,将插入排序的交换步长由1增加到h。希尔排序的思想是使数组中任意间隔为h的元素有序。步长调幅为h = 3*h + 1, 也就是1,4,13,40,121,364, 1003....这种步长算法是经过论文证明为比较高效的步长。最开始由最大步长开始排序,最大步长为w ...
分类:
编程语言 时间:
2019-12-17 13:02:22
阅读次数:
108
1: 介绍 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够 ...
分类:
编程语言 时间:
2019-12-15 18:29:32
阅读次数:
91
直接插入排序,希尔排序 求大数阶乘: // 1000 的阶乘 2568 位 #include <stdio.h> int a[3000]; void show(int k) { int i=0; printf("位数 %d 位\n",k); for (i=k-1; i>=0; i--) { prin ...
分类:
其他好文 时间:
2019-12-15 00:54:30
阅读次数:
131
1算法 排序 选择排序 冒泡排序 希尔排序2数据结构 数组 集合 队列 栈 先进后出 堆 (堆是一种经过排序的树形数据结构) 完全二叉树 平衡二叉树 红黑树 3设计模式 工厂模式 单例模式 代理模式 策略模式 (我理解的只有这几个) 迭代器模式 (工作中没有具体使用 只有粗略的使用到) 工厂模式:工 ...
分类:
其他好文 时间:
2019-12-13 23:23:48
阅读次数:
116
1. 希尔排序 算法核心思想 希尔排序本质也是一种插入排序,但是是根据简单插入排序进行优化后的一种更加高效的版本,别称缩小增量排序。希尔排序的核心思想是将排序数组按照步长进行分组,然后对分组的元素进行直接插入排序,循环缩小分组步长,最后当步长长度为1的时候排序结束。希尔排序在数组中采用的是跳跃式分组 ...
分类:
编程语言 时间:
2019-12-09 21:44:10
阅读次数:
97