插入排序_希尔排序
思想:先对待排序记录进行宏观调整,再进行微观调整。宏观指:将记录序列分成若干个子序列,分布对每个序列进行插入排序。
程序代码:
void ShellInsert(Elem R[],int dk)
{
for(i = dk+1; i < R.length; i++)
if(R[i-dk] > R[i])
{
R[0] = R[i];
for(j = i - dk;(j > 0) && (R[0] < R[j]); j -= dk)
R[j+dk] = R[j];
R[j+dk] = R[0];
}
}
void ShellSort(Elem R[],int delta[],int t) //增量为delta[]的希尔排序
{
for(k = 0;k < t;k++)
ShellInsert(R,delta[k]); //一趟增量为delta[k]的希尔排序
}
时间复杂度:平均比较次数和平均移动次数都是O(n1.3)左右。
稳定性:不稳定。