希尔排序
不断缩小增量的插入排序
原理
以某个增量h为步长跳跃分组进行插入排序,增量是一个从h逐渐缩小至1的过程,所以又称缩小增量排序。
其核心在于间隔序列设定,是与插入排序的本质区别。插入排序始终增量为1。
最佳增量: k趟排序增量步长为(2^k)-1,即增量序列(2^k)-1,…15,7,3,1
分析
时间复杂度:nlogn
代码
void shellsort(int a[],int len){ int gap = len; while(gap = gap/2){//增量 for(int i=gap;i<len;i++){//下面的就是插入排序,间距为gap int key=a[i]; int j=i-gap; while(j>=0 && a[j]>key){ a[j+gap] = a[j]; j-=gap; } a[j+gap] = key; } } }