数据结构课程设计排序实验报告.doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据结构》课程设计报告
专业
班级
姓名
学号
指导教师
起止时间
课程设计:排序综合
一、任务描述
利用随机函数产生n 个随机整数( 20000 以上),对这些数进行多种方法进行排序。
(1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、
起泡排序、快速排序、选择排序、堆排序、归并排序)。并把排序后的结果保存在不同的文件
中。
(2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
要求:根据以上任务说明,设计程序完成功能。
二、问题分析
1、功能分析
分析设计课题的要求,要求编程实现以下功能:
(1)随机生成 N 个整数,存放到线性表中;
(2)起泡排序并计算所需时间;
(3)简单选择排序并计算时间;
(4)希尔排序并计算时间;
(5)直接插入排序并计算所需时间;
(6)时间效率比较。
2、数据对象分析
存储数据的线性表应为顺序存储。
三、数据结构设计
使用顺序表实现,有关定义如下:
typedef int Status;
typedef int KeyType ; 直接插入排序
0.退出系统
(二)程序模块结构
由课题要求可将程序划分为以下几个模块(即实现程序功能所需的函数)
:主控菜单项选择函数menu()
创建排序表函数InitList_Sq()
起泡排序函数Bubble_sort()
简单选择排序函数SelectSort()
希尔排序函数ShellSort();
对顺序表L 进行直接插入排序函数Insertsort()
(三)函数调用关系
程序的主要结构(函数调用关系)如下图所示。
main()
RandSqlist()TimeCompare()menu()InitSqlist()
TBubbleSort()TBInsertSort()TQuickSort()TChooseSort()THleapSort()TInsertSort() BubbleSort()BInsertSort()QuickSort()ChooseSort()HeapSort()InsertSort()
Qsort()Partition()HeapAdjust()
其中 main()是主函数,它负责调用各函数。进行调用菜单函数menu(),根据选择项0~4
调用相应的函数。
main() 函数使
for 循环实现重复选择。其循环结构如下:
for (;;)
{
long start,end;
switch(menu())
{
case 1:
printf("*起泡排序*\n");
start=clock();
Bubble_sort(L);
end=clock();
printf("%d ms\n",end-start);
fp=fopen("D:起泡排序.txt","w");
if(fp==NULL)xt","w");
if(fp==NULL)xt","w");
if(fp==NULL)xt","w");
if(fp==NULL)ey=rand()%30001+1;
fp=fopen("D: 构造一个线性表.txt","w");
开始
i=1
N
i Y J=i J Y N N L.[j] Y L.[j]<->L.[j+1] J++ i++ 结束 if(fp==NULL) ey,[j].key)) { flag=1;共通过 n -1 趟 ,得到一个按排序码从小到大排列的有序序 列 流程图: 开始 i=1 i i=j K=j+1 K Y L.r[j] Y J=k K++ N i!=j Y L.r[i]<->L.r[j] i++ N N 结束 代码描述: void SelectSort(SqList &L) { ] 中选择 key 最小的记录 int k=i; for(int j=i+1;j<= ; j++) if ( LT[j].key,[k].key)) k=j; if(k!=i){ x=[i]; [i]=[j]; [j]=x; } } } ey , [i-dk].key )) { [0]= [i]; int j; for(j=i-dk;(j>0)&&(LT [0].key , [j].key ));j-=dk) [j+dk]= [j]; [j+dk]= [0]; } } } void ShellSort(SqList &L,int dlta[],int t)