希尔排序基本思想
先分组在进行排序,在对组内进行直接插入排序
组内先设置一个初始值gap=n/2;将数列分成gap组
第0组的数值为:a[0],a[0+gap],a[0+2gap] …直到下标越界
第1组的数值为:a[1],a[1+gap],a[1+2gap]…直到下标越界
…
第gap-1组的数值为:a[gap-1],a[gap-1+gap],a[gap-1+2*gap]…直到下标越界
每组进行直接插入排序
然后将gap缩进为gap/=2;重复第一步,当gap缩进为1时,就是直接插入排序,完成数组排序。
希尔排序代码
void straightSort(int *arr, int n ,int start ,int gap)
{
int tmp = 0;
int j = start;
for(int i =strat+gap;i<n;i+=gap)
{
tmp = arr[i];
for(int j = i-gap;j>=0&&arr[j]>tmp;j-=gap)
{
arr[j+gap] = arr[j];
}
arr[j+gap] tmp;
}
}
void shellSort(int *arr, int n)
{
for(int gap = n/2;gap>=1;gap/=2)
{
for(int i=0;i<=gap-1;i++)
{
straightSort(arr,n,i,gap);
}
}
}