- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实训报告
实验名称:数据结构
题目:内部排序比较
专业: 班级: 姓名: 学号: 实验日期:
一、实验目的:通过随机数据比较各内部排序算法的关键字比较次数和关键字移动的次数,以取得直观感受。训练学生综合设计算法能力。
二、实验要求:待排序长度不小于100,数据可有随机函数产生,用五组不同输入数据做比较,比较的指标为关键字参加比较的次数和关键字移动的次数;对结果做简单的分析,包括各组数据得出结果的解释;设计程序用顺序存储。
三、实验内容
1、待排序表的表长不小于100;至少要用5组不同的输入数据作比较;排序算法不少于3种;
2 、待排序的元素的关键字为整数;
3 、比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换以3次计)。
4、演示程序以人机对话的形式进行。每次测试完毕显示各种比较指标的列表,以便比较各种排序的优劣。
5、最后要对结果作简单的分析。
6、测试数据:用伪随机数产生程序产生。
四、实验编程结果或过程:
1. 数据定义
typedef struct {
KeyType key;
}RedType;
typedef struct {
RedType r[MAXSIZE+1];
int length;
}SqList;
2. 函数如下,代码详见文件“排序比较.cpp”
int Create_Sq(SqList L)
void Bubble_sort(SqList L)//冒泡排序
void InsertSort(SqList L)//插入排序
void SelectSort(SqList L) //简单选择排序
int Partition(SqList L,int low,int high)
void QSort(SqList L,int low,int high)//递归形式的快速排序算法
void QuickSort(SqList L)
void ShellInsert(SqList L,int dk)//希尔排序
void ShellSort(SqList L,int dlta[ ])3. 运行测试结果,运行结果无误,如下图
语速个数为20
元素个数为100
错误调试 无。
影响排序的因素:
1、待排序的记录数目n 的大小。
2、记录本身数据量的大小,也就是记录中除关键字外的其他信息量的大小。
3、关键字的结构及其分布情况。
4、对排序稳定性的要求
五、实验总结:
(1)实验中的存在问题和提高
1、存在问题:程序有待增强。
2、提高:界面处理简洁。
(2)收获与体会:
1、随机数的生成;
2、排序的算法的比较次数与移动次数的计算
3、各种排序的算法
附录 源程序
/*一.选择排序算法:
算法基本原理:
一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,否则交换min与i位置上数。
算法实现:*/
#include stdio.h
//选择排序,如果第一个数字小于后面的则向后移动,依次类推
//该排序时不稳定的,时间复杂度是N平方
int main()
{
int array[10] = {112,4,2,3,5,33,6,7,8,9};//定义一个数组
int length = sizeof(array)/sizeof(array[0]);//得到数组的长度
int min, k=0, s=0, i=0, j=0;//k保存临时结果,s,i,j为循环变量
//选择排序开始
for(i=0;ilength;i++)
{min=i;
for(j=i+1;jlength;j++)
{
if(array[i]array[j])
{min=j;
}
if(min!=i)
{k=array[i];
array[i]=array[j];
array[j]=k;
}
}
}
//选择排序结束,输出显示排序的结果
for(s=0; slength; s++)
{
printf(%d \n,array[s]);
}
return 0;
}
/*二.冒泡排序
算法基本原理:
对尚未排序的各元素从头到尾依次比较相邻的两个元素是否逆序(与欲排顺序相反),若逆序就交换这两元素,经过第一轮比较排序后便可把最大(或最小)的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了你所要的顺序。
算法实现:*/
#include stdio.h
文档评论(0)