实验八 顺序表的排序实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机科学与技术系实验报告
专业名称计算机科学与技术
课程名称数据结构与算法
项目名称实验八顺序表的排序实验
班级
学号 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()函数实现排序。
返回L○4在主函数中调用函数实现操作
本程序包含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("%d",&i);
if(i>0){
printf("请输入表中元素:\n");
for(L->last=1;L->last<=i;L->last++)
scanf("%d",&L->r[L->last]);
}
}
(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",i+1,di[i]);
for(int j=1;j
printf("%2d ",L->r[j]);
printf("\n");
}
return L;
}
(4)定义ShellInsert()函数对顺序表L做一趟希尔插入排序void ShellInsert(Seqlist *L,int delta){
int i,j,k;
for(i=1;i<=delta;i++){
for(j=i+delta;j
L->r[0]=L->r[j];
k=j-delta;
while(L->r[0]
L->r[k+delta]=L->r[k];
k=k-delta;
}
L->r[k+delta]=L->r[0];
}
}
}
(5)在主函数中调用函数完成操作
int main()
{
Seqlist *L;
int b[3]={4,2,1};
L=(Seqlist *)malloc(sizeof(Seqlist));
SqLset(L);
L=ShellSort(L,b,3);
printf("最终希尔排序之后的结果\n");
for(int i=1;i
printf("%2d ",L->r[i]);
return 0;
}
4、调试分析
编译无错误
5、用户使用说明
程序名为class2.exe,在DEBUG文件夹里面。运行环境Visual c++ 6.0。
6、测试结果
7、附录
#include "malloc.h"
#include "stdio.h"
#define maxlen 50
typedef struct{ //定义顺序表int r[maxlen];
int last;
}Seqlist;
void SqLset(Seqlist *L){ //输入表的长度,再输入表中的元素
int i;
L->last=-1;
printf("请输入表长:");
scanf("%d",&i);
if(i>0){
printf("请输入表中元素:\n");
for(L->last=1;L->last<=i;L->last++)
scanf("%d",&L->r[L->last]);
}
}
void ShellInsert(Seqlist *L,int delta){
//对顺序表L做一趟希尔插入排序,delta为该趟排序的增量
int i,j,k;
for(i=1;i<=delta;i++){