希尔排序一般将数组长度的整除于2为初始增量,然后继续整除于2直至为1,如长度为11,则增量序列为:1,2,5
希尔排序也叫做缩小增量排序,它通过先设置一个增量n,大小为数组长度的一半,将间隔为n的元素视作一个组,然后对每个组内部的元素进行从小到大进行插入排序;然后再将增量n缩小一半,再次进行分组插入排序,直到增量n为1,因为增量为1的时候,所有的元素都为同一个组了
下图为图示过程:
每次增量均使用插入排序
代码实现:
#includeusing namespace std; void shellsort(int *a,int n) { int inc; for(inc = n / 2; inc > 0; inc = inc / 2)//增量设置并自除于2 { for(int i = inc;i < n;i ++) { int key = a[i]; for(int j = i;j >= inc && key



