数据结构课程设计-排序算法演示系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
各专业全套优秀毕业设计图纸
计算机学院
数据结构课程设计
题目:数据结构排序算法演示系统
班级:
姓名:
学号:
同组人姓名:
起迄日期:
课程设计地点:
指导教师:
评阅意见:
成绩评定:
评阅人:日期:
完成日期:2014年12月
目录
一、课程设计的目的 (1)
二、设计内容和要求 (1)
三、数据采取的结构 (1)
四、功能模块详细设计 (1)
4.1 详细设计思想 (2)
4.1.1 冒泡排序 (5)
4.1.2 快速排序 (7)
4.1.3 直接插入排序 (9)
4.1.4 希尔排序 (10)
4.1.5 直接选择排序 (12)
4.1.6 堆排序 (14)
4.1.7归并排序 (17)
五、总结或心得体会 (19)
六、参考文献 (20)
七、附录 (20)
一. 设计目的
随着计算机技术的发展,各种排序算法不断的被提出。排序算法在计算机科
学中有非常重要的意义,且应用很广泛。在以后的发展中排序对我们的学习和生
活的影响会逐渐增大,很有必要学习排序知识。此次课程设计一方面使自己掌握
排序的知识,另一方面锻炼一下团队合作开发系统的能力。
二. 设计内容和要求
功能要求:
(1)界面友好,易与操作。可采用菜单或其它人机对话方式进行选择。
(2)实现各种内部排序。包括直接插入排序,冒泡排序,直接选择排序,希尔排序,快速排序,堆排序,归并排序。
(3)待排序的元素的关键字为整数或(字符)。可用随机数据和用户输入数据作测试比较。比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换以3次计)。
(1)演示程序以人机对话的形式进行。每次测试完毕显示各种比较指标值的列表,以便比较各种排序的优劣。
三. 本设计所采用的数据结构
typedef struct
{
int key;
}RecType;
4.1 详细设计思想
主函数:
#include
#include
#include
#define L 8 //排序元素个数
#define FALSE 0
#define TRUE 1
typedef struct
{
int key;
}RecType;
RecType R[L];
int num;
int sum;
int sun; //定义排序趟数的全局变量
//系统主界面
//主函数
int main()
{
RecType S[100];
int i,k;
char ch1,ch2,q;
printf("\n\t\t***********排序算法演示系统************\n\n\t\t请输入%d个待排序的数据:\n",L);
for(i=1;i<=L;i++)
{
printf("\t\t请输入第%dth数据:",i);
scanf("%d",&S[i].key);
getchar();
}
ch1='y';
while(ch1=='y')
{
printf("\n\t\t 菜单\n");
printf("\n\t\t***********************************************\n");
printf("\n\t\t * 1--------更新排序数据* 2--------直接插入排序\n");
printf("\n\t\t * 3--------希尔排序* 4--------冒泡排序\n");
printf("\n\t\t * 5--------快速排序* 6--------直接选择排序\n");
printf("\n\t\t * 7--------堆排序* 8--------归并排序\n");
printf("\n\t\t **********0--------退出************ \n");
printf("\n\t\t********************************************\n");
printf("\n\t\t请选择:");
scanf("%c",&ch2);
getchar();
for(i=1;i<=L;i++)
{
R[i].key=S[i].key;
}
switch(ch2)
{
case '1':
printf("\n\t\t请输入%d个待排序数据\n\t\t",L);
for(i=1;i<=L;i++)
{
scanf("%d",&S[i].key);
getchar();
printf("\t\t");
}
printf("\n\t\t数据输入完毕!");
break;
case '2':
Insertsort();
break;
case '3':
Shellsort();
break;
case '4':
Bubblesort();
break;
case '5':
printf("\n\t\t原始数据为(按回车键开始排序):\n\t\t");
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
num=0;sun=0;sum=0;
Quicksort(1,L);
printf("\n\t\t排序最终结果是:\n\t\t");
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
printf("\n\t\t比较次数是:%d\n\t\t",sum);