排序算法总结:
希尔排序(Shell Sort)是插入排序的一种算法,是对直接插入排序的一个优化,也称缩小增量排序。希尔排序是非稳定排序算法。
希尔排序是基于直接插入排序的以下两点性质而提出的改进方法:
1.插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率。
2.插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位。
思想:希尔排序是将待排序的数组元素 按下标的一定增量分组 ,分成多个子序列,然后对各个子序列进行直接插入排序算法排序;然后依次缩减增量再进行排序,直到增量为1时,进行最后一次直接插入排序,排序结束。
时间复杂度情况如下:(n指待排序序列长度)
-
最好情况:序列是正序排列,在这种情况下,需要进行的比较操作需(n-1)次。后移赋值操作为0次。即O(n)
-
最坏情况:**O(nlog2n)。
-
渐进时间复杂度(平均时间复杂度):O(nlog2n)
希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快;当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。所以,希尔排序的时间复杂度会比O(n²)好一些。
希尔排序是不稳定的,这个想必也不同过多解释,因为元素的交换不再是临近元素,而是越过一个间隔,这个间隔中如果有相同值的元素,那么就会造成不稳定。
Python实现:
def shellSort(arr):
l = len(arr)
if l <= 1:
return arr
interVal = l//2
while interVal >= 1:
for i in range(l-interVal):
if arr[i]>arr[i+interVal]:
arr[i], arr[i+interVal] = arr[i+interVal], arr[i]
interVal //= 2