北邮数据结构实验-第三次实验-排序总结.doc 立即下载
2024-12-13
约1.6万字
约23页
0
219KB
举报 版权申诉
预览加载中,请您耐心等待几秒...

北邮数据结构实验-第三次实验-排序总结.doc

北邮数据结构实验-第三次实验-排序总结.doc

预览

免费试读已结束,剩余 18 页请下载文档后查看

10 金币

下载文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

第页
北京邮电大学电信工程学院
第页
数据结构实验报告
1.实验要求
(1)实验目的
通过选择下面两个题目之一,学习、实现、对比各种排序算法,掌握各种排序算法的优劣,以及各种算法使用的情况。
(2)实验内容
使用简单数组实现下面各种排序算法,并进行比较。
排序算法:
		1、插入排序
		2、希尔排序
3、冒泡排序
4、快速排序
5、简单选择排序
6、堆排序(选作)	
7、归并排序(选作)
8、基数排序(选作)
9、其他
要求:
		1、测试数据分成三类:正序、逆序、随机数据
2、对于这三类数据,比较上述排序算法中关键字的比较次数和移动次数(其中关键字交换计为3次移动)。
3、对于这三类数据,比较上述排序算法中不同算法的执行时间,精确到微秒(选作)
4、对2和3的结果进行分析,验证上述各种算法的时间复杂度
编写测试main()函数测试排序算法的正确性。


2.程序分析
2.1存储结构
顺序表:
示意图:
a0a1a2a3a4a5a6a7


2.2关键算法分析

测试数据的产生:正序、逆序、随机数据
用两个数组实现乱序、顺序以及逆序数据的排序。
基本思想为:随机序列产生一个指定长度的乱序序列,然后通过memcpy()函数拷贝到第二个数组里,第二个数组作为乱序序列的保存数组,每次对第一个数组进行排序,之后拷贝第二个数组中的乱序序列到第一个数组,实现各次乱序排列。只要算法正确(第一步可以检验),之后顺序排列只需反复对第一个数组进行操作即可,再后用第二个数组保存逆序数组,然后同样在每次排序之后复制第二数组存储的乱序序列到第一组,对第一组反复排序即可。
	<1>pRandom1=newlongint[Max+1];pRandom2=newlongint[Max+1];
<2>srand((unsigned)time(NULL));for(inti=1;i<=Max;i++)pRandom2[i]=rand();
<3>memcpy(obj.pRandom1,obj.pRandom2,(Max+1)*sizeof(longint));

排序算法:

<1>插入排序:依次将待排序的序列中的每一个记录插入到先前排序好的序列中,直到全部记录排序完毕。

/1/intj=0;
/2/for(inti=2;i<=Max;i++)parray[0]=parray[i];comparetimes[0]++;

/4/parray[j+1]=parray[0];movetimes[0]+=2;
示意图:

r1,r2,r3,…,ri-1,ri,ri+1,…,rn


有序区待插入无序区

<2>希尔排序:先将整个序列分割成若干个子列,分别在各个子列中运用直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。

intSort::ShellSort(longintparray[])
{intj=0;
	for(intd=Max/2;d>=1;d/=2)
	{for(inti=d+1;i<=Max;i++)
		{parray[0]=parray[i];
			comparetimes[1]++;
			for(j=i-d;j>0&&parray[0]<parray[j];j-=d)
			{parray[j+d]=parray[j];
				movetimes[1]++;}
			parray[j+d]=parray[0];
			movetimes[1]+=2;}}
	return0;}

<3>冒泡排序:两两比较相邻记录的关键码,如果反序则交换,直到没有反序记录为止。

intSort::BubbleSort(longintparray[])
{intexchange=Max;
	intbound,j;
	while(exchange)
	{bound=exchange;
		exchange=0;
		for(j=1;j<bound;j++)
		{comparetimes[2]++;
			if(parray[j]>parray[j+1])
			{parray[0]=parray[j];
				parray[j]=parray[j+1];
				parray[j+1]=parray[0];
				exchange=j;
				movetimes[2]+=3;}}}
		return0;}

示意图:
r1,r2,r3,…,ri-1,ri,ri+1,…,rn


反序则交换有序区

<4>快速排序:首先选择一个基准,将记录分割为两部分,左支小于或等于基准,右支则大于基准,然后对两部分重复上述过程,直至整个序列排序完成。

intSort::QuickSort(longintparray[])
{QuickSortR
查看更多
王子****青蛙
实名认证
内容提供者
单篇购买
VIP会员(1亿+VIP文档免费下)

扫码即表示接受《下载须知》

北邮数据结构实验-第三次实验-排序总结

文档大小:219KB

限时特价:扫码查看

• 请登录后再进行扫码购买
• 使用微信/支付宝扫码注册及付费下载,详阅 用户协议 隐私政策
• 如已在其他页面进行付款,请刷新当前页面重试
• 付费购买成功后,此文档可永久免费下载
全场最划算
12个月
199.0
¥360.0
限时特惠
3个月
69.9
¥90.0
新人专享
1个月
19.9
¥30.0
24个月
398.0
¥720.0
6个月会员
139.9
¥180.0

6亿VIP文档任选,共次下载特权。

已优惠

微信/支付宝扫码完成支付,可开具发票

VIP尽享专属权益

VIP文档免费下载

赠送VIP文档免费下载次数

阅读免打扰

去除文档详情页间广告

专属身份标识

尊贵的VIP专属身份标识

高级客服

一对一高级客服服务

多端互通

电脑端/手机端权益通用