各种排序算法时间性能的比较讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实训报告
实训题目:各种排序算法时间性能的比较
学院:计算机科学与技术学院
专业:软件工程
班级: 142 学号: 1400170269 学生姓名:莫磊
指导教师:蔡丽
2016年 3 月15 日
一、实训目的及要求
数据结构是计算机课程的一门重要的基础课,它的教学要求大致有三个重要方面:
其一就是让学生学会分析研究计算机加工的数据对象的特性,以便为数据选择适当的物理结构和逻辑结构;其二,根据结构,选择适当的算法,并初步掌握算法的时间分析和空间分析;其三,学习复杂的程序设计。本综合实训利用Visual Studio 2008 集成编程环境为实践工具,通过上机实践培养学生分析具体问题、解决实际问题的能力,训练和培养学生的数据抽象能力和程序设计的能力。
数据结构是一门实践性较强的课程,以培养学生的数据抽象能力和程序设计的能力为目的。在实训时应注重培养学生的实际操作能力。本综合实训安排了18学时的实
验课时,具体要求如下:
1. 学习和理解每个实训题目的基本理论和方法;
2. 掌握每个实验的实现步骤和关键技术;
3. 准备好实验所需要的资源和文档;
4. 上机实现程序,得到通过调试的正确程序。
5. 根据每个实验的不同要求,完成实验报告的word文档。
二、实训环境
Windows XP
Visual Studio 2013
三、实训内容
(1) 设计并实现上述各种排序算法;
(2) 产生正序和逆序的初始排列分别调用上述排序算法,并比较时间性能;
(3) 产生随机的初始排列分别调用上述排序算法,并比较时间性能。
(4)对各种排序方法(直接插入排序、希尔排序、起泡排序、直接选择排序)的时间性能进行比较。
四、算法描述及实训步骤
上述各种排序方法都是基于比较的内排序,其时间主要消耗在排序过程中进行的记录的比较次数和移动次数,因此,统计在相同数据状态下不同排序算法的比较次数和移动次数,即可实现比较各种排序算法的目的。
五、总结及心得体会
直接选择排序算法是对冒泡排序的改进,这种方法是在参加排序数组中找出最小(或最大)的数据元素,使它与第一个元素中的数据相互交换位置然后再在余下的元素中找出最小(或最大)的数据元素与第二个元素中的元素交换位置,以此类推直到所有元素成为有序序列。
六、实训结果
七、源代码:
#include
#include
#include
//正序希尔排序
void xiEr(int num[], int n, int &no, int &r){ int item;
int i, j, d;
for (d = n / 2; d >= 1; d = d / 2){
for (i = d; i item = num[i]; j = i - d; while ((j >= 0) && (item num[j + d] = num[j]; j = j - d; r = r + 1; } num[j + d] = item; no = no + 1; } } // printf("\n"); // for(int x=0;x // printf("%d\t",num[x]); // } } //逆序希尔排序 void xiErUp(int num[], int n, int &no, int &r){ int item; int i, j, d; for (d = n / 2; d >= 1; d = d / 2){ for (i = d; i item = num[i]; j = i - d; while ((j >= 0) && (item>num[j])){ num[j + d] = num[j]; j = j - d; r = r + 1; } num[j + d] = item; no = no + 1; } } } //正序冒泡排序 void MaoPao(int num[], int n, int &no, int &r){ bool flag; int test; for (int i = 1; i flag = true; for (int j = n - 1; j >= i; j--){ if (num[j] test = num[j]; num[j] = num[j - 1]; num[j - 1] = test; flag = false; r++; } no++; } if (flag){ return; } } } void MaoPaoUp(int num[], int n, int &no, int &r){ bool flag; int test; for (int i = 1; i flag = true; for (int j = n - 1; j >= i; j--){