- 1、本文档共11页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1404011013_14计科一班_高婷婷_实验四_顺序表的排序实验教程
。
计算机科学与技术系
实 验 报 告
专业名称计算机科学与技术
课程名称数据结构与算法
项目名称顺序表的排序实验
班 级14计科一班
学 号1404011013
姓 名高婷婷
同组人员
实验日期2016.3.29
一、实验目的与要求:
(简述本次实验要求达到的目的,涉及到的相关知识点,实验的具体要求。)
实验目的:掌握以顺序表组织排序数据元素的排序方法,重点是希尔排序、快速排序、归并排序。
涉及到相关知识点:顺序表的建立、冒泡排序的改进、直接插入排序以及快速排序算法的应用。
实验的具体要求:
--改进冒泡排序,对一个待排序的数据元素集合进行奇偶转换排序。
--在熟悉直接插入排序的基础上,结合折半插入排序算法的描述,写出折半插入排序算法的实现过程(函数),并通过运行验证。
--设计算法将一个整形数组调整为这样的数组:所有3的倍数在最左边,所有除以3余1的数在中间,而所有除以3余2的数在最左边。要求算法时间尽可能少。
二、实验内容
(根据本次实验项目的具体任务和要求,完成相关内容,可包括:实验目的、算法原理、实验仪器、设备选型及连线图、算法描述或流程图、源代码、实验运行步骤、关键技术分析、测试数据与实验结果、其他 )
1、问题分析
--(1)奇偶转换排序:
题目需要建立一种新的排序方式,选取所有奇数列的元素与其右侧相邻的元素进行比较,将较小的元素排在最前面,
选取所有偶数列的元素与其右侧相邻的元素进行比较,将较小的元素排在最前面,重复前面两步直到所有序列有序。
折半插入排序
插入排序采用顺序数据结构,插入元素伴随移动数据,但一般思路是从前向后一次与插入元素进行比较,时间复杂度O(n),效率较低,由于数组r[0...i-1]本身是有序的,可以借鉴折半查找的思想寻找插入位置,此时时间复杂度为O(lgn).当数据量足够大时,这两种排序算法所用的时间相差很大,获得每个元素的插入位置后,仅需一次向后移动位置即可。
快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另一部分的所有数据要小,然后对这两部分数据进行快速排序,整个排序过程可以递归进行,以此达到整个数据序列有序。
2、概要设计
(1)改进冒泡排序,对一个待排序的数据元素集合进行奇偶转换排序。
详细思路:
--建立顺序表RecordList *SqLset()
RecordList *SqLset(){
RecordList *L;
int i=0,a;
L=malloc(sizeof(RecordList));
printf(输入一个整型序列,输入0时结束!);
scanf(%d,a); //输入一个整数
L-length=0;
while(a!=0){
L-r[i]=a;
L-length++,i++;
if(L-length==LIST_SIZE-1) break;
scanf(%d,a);
}
return(L);
}
--设计排序函数void Bub(RecordList *L),第一趟对所有奇数i,将r[i]与r[i+1]进行比较,第二趟对所有的偶数i,将r[i]与r[i+1]进行比较,每次比较时若r[i]r[i+1],则将二者交换,重复上述过程至整个数据表有序。
--主函数main()调用上述两个函数,得到运行结果
(2)在熟悉直接插入排序的基础上,结合折半插入排序算法的描述,写出折半插入排序算法的实现过程(函数),并通过运行验证。
--建立顺序表
--写一个折半插入排序法的函数 void BinSort(RecordList *L),在函数中写一个循环,在循环中应用折半插入排序,数组中变换二次区间方法实现折半插入法
算法构思:
a.low=1;high=i-1//有序表长度i-1,第i个元素为待插元素;
b.若lowhigh,得到插入位置,转e;
c.若low=high,mid=(low+high)/2;//取表的中点,将表一分为二,确定待插入区间;
d.若r[0]r[mid],则high=mid-1;//插入位置在左子表中
否则,low=mid+1;//插入位置在右子表中
e.high+1即为待插入位置,从i-1到high+1的元素逐个后移,然后将r[0]放在r[high+1]位置,完成一趟插入排序
--对编好的程序进行测试,得出测试结果
(3)设计算法将一个整形数组调整为这样的数组:所有3的倍数在最左边,所有除以3余1的数在中间,而所有除以3余2的数在最左边。要求算法时间尽可能少。
--建立一个表长为length的顺序表
--根据题意使用快速排序法对其排序,设置函数void Partion(RecordList *L),
您可能关注的文档
- 13003linux应用实践课程设计教程.docx
- 电气控制与PLC技术4.ppt
- 石斌:向万科学习财务管理.ppt
- 硕士学位研究生个人培养计划表 姜雪.doc
- 监理单位安全生产管理11.ppt
- 社会主义国收入分配及社会保障制度.ppt
- 13.3.2特殊直角三角形的性质和判定教程.ppt
- 矿井井口恒温供暖自动控制系统研究与应用项目责任书.docx
- 1305工作面回撤作业规程教程.doc
- 示范单位制度汇编.doc
- 2024年石油炼化企业消防系统升级合同2篇.docx
- 统计学期末考试题库:2025年误差控制与调查数据质量评估试题.pdf
- 2025年资产评估师职业资格考试真题卷:资产评估师职业资格考试备考资料试题.pdf
- 2025年自然灾害安全防范培训考试试题库与答案解析.pdf
- 消防执业资格考试题库(消防监督检查要点):法律法规解析与应用试题.pdf
- 高压电工考试必备:2025年高压设备维护保养计划与保养成本控制试题.pdf
- 2025年专升本艺术概论模拟试卷:艺术市场与文化产业市场调查与分析试题.pdf
- 2025年专升本艺术概论考试模拟卷:艺术审美心理在艺术市场中的作用试题.pdf
- 2025年专升本艺术概论考试模拟卷:艺术流派对比分析高分技巧.pdf
- 2024年草原生态放牧保护合同.docx
文档评论(0)