计算机科学与技术系
实 验 报 告
专业名称 计算机科学与技术 课程名称 数据结构与算法 项目名称实验八顺序表的排序实验
班 级
学 号 1 姓 名
同组人员
实验日期
实验八 顺序表的排序实验
实验题目:为希尔排序设计建表函数和主函数,要求输出每一趟排序的结果,
并通过运行来验证
1.问题分析
本程序要求为希尔排序设计建表函数和主函数,要求输出每一趟排序的结果,并通过运行来验证
完成该实验需要以下4个子任务: 1定义一个顺序表的存储结构 ○
2建立顺序表 ○
3定义ShellSort()函数对顺序表L按增量序列di[0]-di[n-1]进行希尔排序 ○
4定义ShellInsert()函数对顺序表L做一趟希尔插入排序 ○
5在主函数中调用函数完成操作 ○
测试数据设计如下:
49 52 65 97 35 13 27 50
2.概要设计
1定义一个顺序表的结构○2建立一个顺序表输为了实现上述程序功能,需要:○
3定义ShellSort()ShellInsert()函数实现入表的长度,再输入表中的元素○
简单顺序查找算法,在ShellSort()函数调用ShellInsert()函数实现排序。4在主函数中调用函数实现操作 返回L○
本程序包含3个函数:
1.主函数:main()
2.建顺序表:SqLset() 3.希尔排序:ShellSort() 4.ShellInsert()函数
各函数关系如下:
Sqlset() Main ()
ShellSort() ShellInsert()
3、 详细设计
实现概要设计中定义的所有的数据类型,对每个操作给出了算法和代码,主程序和模块都需要代码。 (1)顺序表
#define maxlen 50 typedef struct{ //定义顺序表 int r[maxlen]; int last; }Seqlist;
Sequenlist *L;
(2) 建立一个顺序表,输入表的长度,再输入表中的元素 void SqLset(Seqlist *L){ //输入表的长度,再输入表中的元素 int i;
L->last=-1;
printf(\请输入表长:\ scanf(\ if(i>0){
printf(\请输入表中元素:\\n\
for(L->last=1;L->last<=i;L->last++) scanf(\ }
}
(3)定义ShellSort()函数对顺序表L按增量序列di[0]-di[n-1]进行希尔排序 Seqlist *ShellSort(Seqlist *L,int di[],int n){ int i,j;
for(i=0;i<=n-1;i++){
ShellInsert(L,di[i]);
printf(\第%d趟希尔排序,增量为%d,排序之后的结果\\n\
for(int j=1;j
printf(\ printf(\