插入排序-希尔排序
- 希尔排序实际是一种分组排序方法
- 基本思想:取一个增量为组距,相同组距的记录放在同一个组排序,增量不断减少,直至增量为1,即最后一遍排序为直接插入排序。
代码
void ShellSort(int R[],int n)
{
int i,j,gap;
int temp;
gap = n/2; //增量
while(gap>0)
{
for(i=gap;i<n;i++)
{
temp=R[i];
j = i-gap;
while(j>=0&&temp<R[j])
{
R[j+gap] = R[j];
j = j-gap; //是为了排序增量相同数据
}
R[j+gap]=temp;
}
gap = gap/2; //增量
}
- 在上面这段代码中,增量是可以改变,人为自己设定。不过科学研究表明,当增量序列为dlta[k] = 2^(t-k+1) - 1 ,0 <=k<=t<=log2(n+1)时,可以获得不错的效率,其时间复杂度为O(n(3/2)),要好于O(n2)。