算法
1.设定步长将待排序元素分组
2.对每组进行插入排序
3.减小步长重复2操作直到步长为1
代码
void ShellSort(int* arr,int len)
{
int t;
int gap;
//1.设定步长变化
for(gap=len/2;gap>=1;gap=gap/2){
//2.希尔排序:根据步长对数据进行分组,在组内进行插入排序
//2.1找到待插入元素:根据分析第一个待插入元素为gap位置上的元素,从gap到len-1都是需要插入的元素
for(int i=gap;i<len;i++){
//2.2进行插入排序
for(int j=i;j>=gap;j=j-gap){
//将待插入数据插到小于他的数据的前面
if(arr[j]<arr[j-gap]){
t=arr[j];
arr[j]=arr[j-gap];
arr[j-gap]=t;
}
}
}
}
}