前言
之前我们总结了比较简单的几种排序方法。冒泡,选择,排序。但是也提到了这些排序方法的缺陷。时间复杂度太高,在有大量数据需要排序的时候,会需要浪费太多的时间。所以在很多场景中是不适合使用。我们这次总结一种时间复杂度更优秀的希尔排序。
思路
希尔排序是以插入排序为基础的改进版本。是由Shell提出的方法。所以就叫希尔排序了。。
插入排序的基本思路是:将元素插入到一个有序的元素集合中。在使用插入排序时,我们是一个接一个的。
希尔排序的思想是:先确定一个flag,将待排序数组分为几个小组。分组方式是:将间隔为flag的数据设为一组。完成一轮插入排序后,缩小flag,再进行第二轮插入排序。直到flag缩小到一。
当我们有一个初始序列时: 9125748635
加入我们在开始时,假设gap为5,则序列分组像这样的
也就是每两个元素为一组。 这时候我们就像是使用插入排序,对五组只有两个元素的序列进行排序。于是排序好的序列为:
4 1 2 3 5 9 8 6 5 7
第一趟排序结束后,我们再对排序好的元素以gap=2来分组。