原文链接:http://blog.youkuaiyun.com/morewindows/article/details/6668714
简单
void ShellSort(int *a,int n){
int i,j,k;
int temp;
int gap;
for(gap = n / 2;gap > 0;gap /= 2)
for(i = 0;i < gap;i++)
for(j = i + gap;j < n;j += gap)
if(a[j - gap] > a[j])
{
temp = a[j];
for(k = j - gap;k >= 0 && a[k] > temp; k -= gap)
a[k + gap] = a[k];
a[k+ gap] = temp;
}
}
进阶
void ShellSort2(int *a,int n){
int i,j,k;
int gap;
for(gap = n / 2;gap > 0;gap /= 2)
for(i = 0;i < gap;i++)
for(j = i + gap;j < n;j += gap)
for(k = j - gap;k >= 0 && a[k + gap] > a[k];k -= gap)
a[k + gap] = a[k];
}