数据结构课题实验报告。
课程题目:编程实现希尔、快速、堆、归并四种排序算法,并计算每种算法的比较、移动次数。要求待排序数据从磁盘文件读入,实施排序后将数据写入另一文件。
实现语言:采用 c作为实现语言。
问题分析和任务定义:
实现此程序可以采用模块化程序设计的方法,用自上而下,分而治之的方法解决一个大问题,并且采用函数嵌套调用,此题可以分为3个部分。
第一部分:编写程序creat实现将待排数据从磁盘文件中读入,程序中是采用线性表的方式读入数据,实现排序后,编写子程序write将排好序的数据写入指定文件,编写print函数将排序个数,交换次数,比较次数依次输出。
第二部分:分别编写shellsort,quicksort,heapsort,mergingsort,实现排序功能。
第三部分:编写菜单和主函数,使用switch 语句,调用各个排序子函数,实现排序功能。自定义数据结构。
template
class sort
排序类,其成员包括:
static void shellsort( sortlistshell排序。
static void quicksort( sortlist快速排序。
static void heapsort ( sortlist堆排序。
static void mergesort( sortlist归并排序。
long comparetimes获取本次排序比较次数。
long shifttimes获取本次排序移动次数。
源**:#include""
#include""
#include""
#include""
#define maxsize 10000000
#define n 20
#define eq(a,b) (a)==b))
#define lt(a,b) (a)<(b))
#define lq(a,b) (a)<=b))
#define len sizeof(sqlist)
#define maxr 10
#define maxnum 100000000
typedef struct nodenode;
typedef struct
for(i=1;i
fclose(fp);
return(l);
void write(qsqlist l)//将序列输出到指定的文件中。
long i;
file *fp;
char filename[n];
printf("\t请输入存储文件名:")
scanf("%s",filename);/输入将要储存的文件名。
fp=fopen(filename,"w");
for(i=1;i<=l->length;i++)将链表中数据逐一写入文件中。
fclose(fp);
void print(qsqlist l)//打印数据个数以及排序过程中的比较次数和移动次数。
printf("\t数据个数:%ld",l->length);
printf("\t比较次数:%ld",comparetimes);
printf("\t移动次数:%ld",shifttimes);
struct node min1(struct node a,struct node b)//比较两接点关键字的大小。
struct node temp;
if(>
temp=b;
elsetemp=a;
comparetimes++;
return(temp);
qsqlist shellinsert(qsqlist l,int dk)//对顺序表以dk为增量作直接插入排序。
int i,j;
for(i=dk+1;i<=l->length;i++)
comparetimes++;
return(l);
qsqlist shellsort(qsqlist l)//希尔排序。
int i,t=0;
int k;
for(t=0;lq(pow(2,t),(l->length+1));t++)
t=t-1;
for(i=1;i<=t;++i)
print(l);
write(l);
return(l);
/quicksort,选取第一个数做为枢轴,使枢轴左边的数都比枢轴小,右边的数都比枢轴大,把数据一分为二。
long quicksort(qsqlist l,long low,long high)//交换顺序表l中子表l->r[low..high]的记录,使枢轴记录到位,并返回其所在位置。
int pivotkey;
l->r[0]=l->r[low];
pivotkey=l->r[low].key;//用序列的第一个记录作枢轴记录。
while(low
comparetimes++;
l->r[0]=l->r[low];
shifttimes++;
l->r[low]=l->r[high];/将high赋值给low
shifttimes++;
l->r[high]=l->r[0];
shifttimes++;
while(lowr[low].key<=pivotkey)//将比枢轴记录大的记录交换到高端。
comparetimes++;
l->r[0]=l->r[low];
shifttimes++;
l->r[high]=l->r[low];
shifttimes++;
l->r[high]=l->r[0];
shifttimes++;
return(low);/返回枢轴所在位置。
qsqlist quick2(qsqlist l,long low,long high)//对顺序表l中的子序列作快速排序。
long pivot;
if(low
return(l);
qsqlist quicksort(qsqlist l)//对顺序表作快速排序。
long low,high;
low=1;//将第一个数据所在位置定义为低位。
数据结构课程设计报告
东莞理工学院城市学院。题目 二叉排序树 专业 计算机科学与技术 本 年级 2010级计算机科学与技术专业 1 班。个人姓名 何振江。指导教师 张娟老师 时间 2010至2011第二学期第18周 地点 实验楼615机房 东莞理工学院城市学院计算机与信息科学系制。2011年 6月。实习报告的内容。一 问...
数据结构课程设计报告
设计一个校园导游程序,为来访的客人提供信息查询服务。1 设计学校的校园平面图。选取若干个有代表性的景点抽象成一个无向带权图 无向网 以图中顶点表示校内各景点,边上的权值表示两景点之间的距离。2 存放景点代号 名称 简介等信息供用户查询。3 为来访客人提供图中任意景点相关信息的查询。4 为来访客人提供...
数据结构课程设计报告
河北科技大学。课程设计报告。学生姓名学号。专业班级。课程名称数据结构。学年学期 2 012 2 013学年第 2 学期指导教师 黄春茹。2 0 13年 6 月。课程设计成绩评定表。一 数据结构课程设计目标。二 问题描述。三 需求分析。四 概要设计。五 详细设计。六 软件说明书 给出软件如何使用,使用...