数据结构课程设计(内部排序算法比较).doc
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据结构实训
目录
一、问题描述 (2)
二、系统分析 (2)
三、系统设计 (3)
(1)友好的人机界面设计: (3)
(2)方便快捷的操作:用户只需要根据不同的需要在界面上输入系统提醒的操
作形式直接进行相应的操作方式即可! (3)
(3)系统采用定义结构体数组来存储数据 (3)
(4)功能介绍: (3)
四、系统实现 (4)
定义结构体数组 (4)
直接排序 (4)
简单选择排序 (5)
冒泡排序 (5)
堆排序 (6)
归并排序 (6)
快速排序 (7)
电脑随机取数 (8)
用户自行输入 (8)
主函数调用 (9)
五、系统测试 (10)
随机取数的测试: (10)
自行输入的测试: (11)
退出系统: (11)
时间的估算: (11)
六、参考文献 (12)
七、实训体会 (12)
姓名:
学号:
联系方式:
内部排序算法比较
一、问题描述
排序是数据结构中重要的一个部分,也是在实际开发中易遇到的问题,所以研究各种排算法的时间消耗对于在实际应用当中很有必要通过分析实际结合算法的特性进行选择和使用哪种算法可以使实际问题得到更好更充分的解决!该系统通过对各种内部排序算法如直接插入排序,冒泡排序,简单选择排序,快速排序,希尔排序,堆排序、二路归并排序等,以关键码的比较次数和移动次数分析其特点,并进行比较,估算每种算法的时间消耗,从而比较各种算法的优劣和使用情况!排序表的数据是多种不同的情况,如随机产生数据、极端的数据如已是正序或逆序数据。比较的结果用一个直方图表示。
二、系统分析
界面的设计如图所示:
|*****************************|
|--------欢迎使用-------|
|------(1)随机取数-----|
|------(2)自行输入-----|
|------(0)退出使用-----|
|*****************************|
请选择操作方式:
如上图所示该系统的功能有:
(1):选择 1 时系统由客户输入要进行测试的元素个数由电脑随机选取数字进行各种排序结果得到准确的比较和移动次数并
打印出结果。
(2)选择 2 时系统由客户自己输入要进行测试的元素进行各种排序结果得到准确的比较和移动次数并打印出结果。
(3)选择0 打印“谢谢使用!!”退出系统的使用!!
三、系统设计
(1)友好的人机界面设计:
|******************************|
|-------欢迎使用---------|
|-----(1)随机取数-------|
|-----(2)自行输入-------|
|-----(0)退出使用-------|
|******************************|
(2)方便快捷的操作:用户只需要根据不同的需要在界面上输入系统提醒的操作形式直接进行相应的操作方式即可!
|******************************|
|-------欢迎使用---------|
|-----(1)随机取数-------|
|-----(2)自行输入-------|
|-----(0)退出使用-------|
|******************************|
请选择操作方式:(用户在此输入操作方式)
(3)系统采用定义结构体数组来存储数据
(4)功能介绍:
①操作功能:a .当用户选择随即电脑随机取数时
系统将弹出——>请输入你要输入的个数:(用户在此输入要电脑取数的
个数)要是用户输入的数据过大系统将提醒错误——>超出范围重新输
入!!!
b . .当用户选择自行输入时
系统将弹出——>请输入你要输入的个数(不大于于30的整数):
当用户输完元素的个数之后系统将提示用户依次输入各个元素。
——>请输入各个元素:
②排序功能:系统有简单选择排序,冒泡排序,堆排序,二路归并排序,快速排序的
功能。
③打印清晰:系统会打印出在排序操作之前电脑随机取数或者用户输入的原始排列顺
序;并将排序操作之后的有序数据打印在原始数据的下面以便用户的对
比。在排序操作结束之后系统将以直方图的形式打出排序过程中比较和
移动次数让客户一目了然地看到排序的结果:
四、系统实现
定义结构体数组
typedef struct
{ int key;
} datatype;
datatype R[MAXNUM];//定义结构体数组
直接排序
void D_InsertSort(datatype R[ ], int n)//直接排序
{
int i,j;
for(i=2; i<=n; i++)
{ cn[0]++;
if (R[i].key {R[0]=R[i]; mn[0]++; for(j=i-1; R[0].key R[j+1]=R[j]; R[j+1]=R[0]; mn[0]+=2; } } }