希尔排序:
希尔排序是在直接插入排序的基础上的改进版,它的基本思想是:先将整个待排序记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序时”,再对全体记录进行一次直接插入排序。
代码实现:
说明:本博客的代码实现贴近数据结构(C语言版) 课本代码风格,使用抽象数据类型。
项目结构
以下文件代码与直接插入排序时所用相同,为避免大量代码重复此处不再附上。
详情可参考直接插入排序:https://blog.csdn.net/ZipayYu/article/details/98245056
status.h
ststus.cpp
SequenceListType.h
SequenceListType.cpp
希尔排序的实现方式一
本部分是按照课本所示代码实现,对子序列分别进行直接插入排序。
/************************************
* 函数名称: ShellInsert
* 函数说明: 对顺序表做一趟希尔插入排序
* 编写人员: Zipay Yu
* 编写日期: 2019/08/05
* 返回类型: void
* 函数参数: SqList & L 待排序顺序表
* 函数参数: int dk 排序增量
*************************************/
void ShellInsert(SqList &L,int dk) {
int i,j;
for (i=dk+1;i<=L.length;++i)
{
if (LT(L.r[i].key, L.r[i - dk].key)) {
//将L.r[i]插入