void ShellSort(SqList &L, int dlta[], int t){
// 按增量序列dlta[0…t-1]对顺序表L作Shell排序
for(k = 0; k < t; k++)
ShellInsert(L, dlta[k]); // 增量为dlta[k]的一趟插入排序
}
void ShellInsert(SqList &L, int dk){
// 对顺序表L进行一趟增量为dk的Shell排序,dk为步长因子
for(i = dk + 1; i <= L.length; i++){
// 开始将r[i] 插入有序增量子表
if(r[i].key < r[i - dk].key){
r[0] = r[i]; // 暂存在r[0]
for(j = i - dk; j > 0 && (r[0].key < r[j].key); j = j - dk)
r[j + dk] = r[j]; // 关键字较大的记录在子表中后移
r[j + dk] = r[0]; // 在本趟结束时将r[i]插入到正确位置
}
}
}
如何选择最佳的序列,目前尚未解决
最后一个增量值必须为1,无除1以外的公因子
不宜在链式存储结构上实现
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。