希尔排序:内排序 插入类排序 不稳定 的排序,平均时间复杂度O(nlogn)~O(n^2)
希尔排序的原理:希尔排序是对直接插入排序的一种改进,减小了时间复杂度,希尔排序又称减小增量排序。将待排序列按照增量 d 分成若干子序列,对子序列进行直接插入排序。然后减小增量d,将序列再分为若干子序列,再对子序列进行直接插入排序。待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。
d的第一次选取d=n/2,第二次取d/2,直到d=1
举例:
10,5,7,25,30,48,21,3
第一趟排序:
选取d=8/2=4
分组
10,5,7,25,30,48,21,3
排序后
10,5,7,3,30,48,21,25
第二趟排序:
选取d=4/2=2
分组
10,5,7,3,30,48,21,25
排序后
7,3,10,5,21,25,30,48
第三趟排序:
选取d=2/2=1
d=1时,就是对整个序列直接插入排序,直接插入排序对基本有序序列排序具有较高的效率。
排序后
3,5,7,10,21,25,30,48
代码: