希尔排序(Shellsort)是冲破二次时间屏障的第一批算法之一,不过还是属于亚二次时间界的。
希尔排序的好坏和增量序列(increment sequence)有很大的关系,最坏的情况时间仍然为N2的
希尔排序就是按照序列中的数字由大到小,在要排列的数组按照序列中的数字互相比较,交换
例如序列为1,3,5
开始 | 81 | 94 | 11 | 96 | 12 | 35 | 17 | 95 | 28 | 58 | 41 | 75 | 15 |
5排序后 | 35 | 17 | 11 | 28 | 12 | 41 | 75 | 15 | 96 | 58 | 81 | 94 | 95 |
3排序后 | 28 | 12 | 11 | 35 | 15 | 41 | 58 | 17 | 94 | 75 | 81 | 94 | 95 |
1排序后 | 11 | 12 | 15 | 17 | 28 | 35 | 41 | 58 | 75 | 81 | 94 | 95 | 96 |
Sedgewick提出几种增量序列可以把最坏时间控制在N3/2,平均时间可以控制在N7/6
其中最好的序列是1,5,19,41,109,.. 该序列中的项或者是 9*4i- 9*2i+1 ( 1,19,109,505,...) 或者是4 - 3 * 2i + 1 (-1,-1,5,41,209, 929, ...) (这个增量在实践中最为人称道)