综合排序(课程设计)
- 格式:doc
- 大小:1.32 MB
- 文档页数:48
c语言排序综合课程设计一、教学目标本课程的教学目标是使学生掌握C语言排序算法的原理和实现方法,能够运用排序算法解决实际问题。
具体目标如下:1.理解排序算法的基本概念和分类。
2.掌握常用的排序算法(冒泡排序、选择排序、插入排序、快速排序等)的原理和实现。
3.了解排序算法的性能分析(时间复杂度、空间复杂度等)。
4.能够使用C语言实现各种排序算法。
5.能够对给定的数据集进行排序,并分析排序结果。
6.能够根据实际问题选择合适的排序算法。
情感态度价值观目标:1.培养学生的逻辑思维能力和解决问题的能力。
2.培养学生对计算机科学的兴趣和热情。
3.培养学生团队合作精神和自主学习能力。
二、教学内容根据教学目标,本课程的教学内容主要包括以下几个部分:1.排序算法的基本概念和分类。
2.冒泡排序、选择排序、插入排序、快速排序等常用排序算法的原理和实现。
3.排序算法的性能分析(时间复杂度、空间复杂度等)。
4.排序算法在实际问题中的应用。
第1周:排序算法的基本概念和分类。
第2周:冒泡排序和选择排序的原理和实现。
第3周:插入排序和快速排序的原理和实现。
第4周:排序算法的性能分析。
第5周:排序算法在实际问题中的应用。
三、教学方法为了达到本课程的教学目标,将采用以下教学方法:1.讲授法:通过讲解排序算法的基本概念、原理和实现方法,使学生掌握排序算法的基础知识。
2.案例分析法:通过分析实际问题,让学生了解排序算法在实际中的应用。
3.实验法:让学生通过动手实践,加深对排序算法的理解和掌握。
4.小组讨论法:鼓励学生之间进行讨论和交流,培养团队合作精神和自主学习能力。
四、教学资源为了支持本课程的教学内容和教学方法的实施,将准备以下教学资源:1.教材:《C语言程序设计》。
2.参考书:《算法导论》、《数据结构与算法分析》。
3.多媒体资料:PPT课件、教学视频等。
4.实验设备:计算机、网络等。
五、教学评估为了全面、客观、公正地评估学生的学习成果,本课程将采用以下评估方式:1.平时表现:通过课堂参与、提问、讨论等环节,评估学生的学习态度和积极性。
.大连科技学院数据结构课程设计题目排序综合学生专业班级指导教师职称副教授所在单位信息科学系软件教研室教学部主任完成日期2013 年1月11 日.课程设计报告单学号专业班级网络工程11-1考核项目评分备注平时工作态度及遵守纪律情况1(10 分)掌握基本理论、关键知识、基本技能的程度和2阅读参考资料的水平(10 分)独立工作能力、综合运用所学知识分析和解决3问题能力及实际工作能力提高的程度(20 分)完成课程设计说明书及软件的情况与水平(小组分工情况、规性、整洁清楚、叙述完整性、4思路清晰程度、工作量及实际运行情况和创新性)(60 分)总评成绩综合评定:(优、良、中、及格、不及格)指导教师签字:2013年1月11日数据结构课程设计任务书一、任务及要求:1.设计(研究)任务和要求研究容:排序综合任务和要求:(1)学习数据结构基础知识,掌握数据结构典型的算法的使用。
(2)对指导教师下达的题目进行系统分析。
(3)根据分析结果完成系统设计。
(4)编程:在计算机上实现题目的代码实现。
(5)完成对该系统的测试和调试。
(6)提交课程设计报告。
要求完成课程设计报告3000 字以上 (约二十页 )。
完成若干综合性程序设计题目,综合设计题目的语句行数的和在100 行语句以上。
2.原始依据结合数据结构课程中的基本理论和基本算法,正确分析出数据的逻辑结构,合理地选择相应的存储结构,并能设计出解决问题的有效算法。
提高程序设计和调试能力。
学生通过上机实习,验证自己设计的算法的正确性。
学会有效利用基本调试方法,迅速找出程序代码中的错误并且修改。
3.参考题目:二、工作量2 周( 10 个工作日)时间三、计划安排第 1 个工作日:查找相关资料、书籍,阅读示例文档,选择题目。
第 2 个工作日-第 3 个工作日:设计程序结构、模块图。
第 4 个工作日-第 9 个工作日:完成程序的编码,并且自己调试、测试。
穿插进行课程设计报告的撰写。
第 10 个工作日:上交课程设计报告,由教师检查软件测试效果、检查课程设计报告,给出学生成绩。
课程设计报告题目:排序综合院系:计算机科学与应用专业年级: 12级计科学号: 121096124学生姓名:平宁宁指导老师:薛海燕2013年6月10日目录一.设计任务书 (2)1.1题目与要求 (2)1.2设计知识点 (2)1.3预期目标 (2)二.概要设计 (2)2.1各种排序算法的特点 (2)2.1.1冒泡排序 (2)2.1.3简单选择排序 (3)2.1.4快速排序 (3)2.1.5 希尔排序 (3)2.1.6 堆排序 (3)2.2各种算法的比较方法 (4)2.2.1 稳定性比较 (4)2.2.2 时间复杂性比较 (4)2.2.3 辅助空间的比较 (4)2.2.4 其它比较 (4)三.详细设计 (4)3.1 流程图 (4)3.2流程图模块说明 (5)3.3可排序表的抽象数据类型定义 (5)3.4程序代码 (6)3.4.1 函数声明 (6)3.4.2 六种排序算法代码 (8)3.4.3 排序算法选择 (13)3.4.4 主函数程序代码 (15)四.调试分析 (19)4.1调试分析 (19)4.2输入输出 (19)4.3排序算法评价 (23)4.4经验和体会 (23)五.参考文献 (24)六.致谢 (24)一.设计任务书1.1题目与要求题目:排序综合要求:利用随机函数产生N个随机整数(20000以上),对这些数进行多种方法进行排序。
要求:1)至少采用三种方法实现上述问题求解(提示,可采用的方法有插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序、归并排序)。
并把排序后的结果保存在不同的文件中。
2)统计每一种排序方法的性能(以上机运行程序所花费的时间为准进行对比),找出其中两种较快的方法。
3)如果采用4种或4种以上的方法者,可适当加分。
1.2设计知识点1)本演示程序对以下6种常用的内部排序算法进行实测比较:冒泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序;2)待排序表的元素的关键字为整数。
c语言课程设计排序综合一、教学目标本章节的教学目标是让学生掌握C语言中的排序算法,包括冒泡排序、选择排序和插入排序。
学生需要了解排序算法的原理和实现方式,能够运用排序算法解决实际问题。
此外,学生还需要掌握排序算法的性能分析,能够根据实际需求选择合适的排序算法。
通过本章节的学习,学生应该能够达到以下具体的学习成果:1.知识目标:–了解排序算法的概念和作用;–掌握冒泡排序、选择排序和插入排序的原理和实现方式;–理解排序算法的性能分析方法。
2.技能目标:–能够编写C语言程序实现排序算法;–能够对给定的数据集进行排序并分析性能。
3.情感态度价值观目标:–培养学生的逻辑思维能力和问题解决能力;–培养学生对计算机科学和编程的兴趣和热情。
二、教学内容本章节的教学内容主要包括排序算法的原理和实现、排序算法的性能分析和应用。
具体的教学大纲如下:1.排序算法的概念和作用–介绍排序算法的定义和目的;–解释排序算法在计算机科学中的应用。
2.冒泡排序–介绍冒泡排序的原理和实现方式;–分析冒泡排序的时间复杂度和空间复杂度。
3.选择排序–介绍选择排序的原理和实现方式;–分析选择排序的时间复杂度和空间复杂度。
4.插入排序–介绍插入排序的原理和实现方式;–分析插入排序的时间复杂度和空间复杂度。
5.排序算法的性能分析–介绍排序算法的性能分析方法;–分析不同排序算法的性能特点和适用场景。
6.排序算法的应用–举例说明排序算法在实际问题中的应用;–引导学生思考如何选择合适的排序算法解决实际问题。
三、教学方法为了达到本章节的教学目标,我将采用以下教学方法:1.讲授法:通过讲解排序算法的原理和实现方式,帮助学生理解排序算法的基本概念和思路。
2.案例分析法:通过分析具体的排序算法案例,让学生能够更好地理解排序算法的应用和性能特点。
3.实验法:让学生通过编写C语言程序实现排序算法,培养学生的编程能力和问题解决能力。
4.讨论法:引导学生进行小组讨论,分享各自的排序算法实现和性能分析结果,促进学生之间的交流和合作。
课程设计排序综合一、教学目标本课程的教学目标是使学生掌握排序综合的基本知识和技能,能够运用排序算法解决实际问题。
具体目标如下:1.知识目标:学生能够理解排序算法的概念和原理,掌握常见的排序算法(如冒泡排序、选择排序、插入排序等)的实现和优缺点。
2.技能目标:学生能够运用排序算法解决实际问题,如对给定的数据集进行排序,并分析排序算法的性能。
3.情感态度价值观目标:学生通过学习排序算法,培养逻辑思维能力、问题解决能力和创新意识,提高对计算机科学和信息技术的兴趣。
二、教学内容本课程的教学内容主要包括排序算法的概念、原理和实现。
具体安排如下:1.排序算法的概念和原理:介绍排序算法的定义、分类和性能评价指标。
2.常见排序算法的实现:介绍冒泡排序、选择排序、插入排序等常见排序算法的具体实现。
3.排序算法的应用:通过实际问题,引导学生运用排序算法解决问题,并分析排序算法的性能。
4.排序算法的优化:介绍排序算法的优化方法和策略,如快速排序、归并排序等。
三、教学方法为了实现本课程的教学目标,采用多种教学方法相结合的方式,包括:1.讲授法:通过讲解排序算法的概念、原理和实现,使学生掌握相关知识。
2.讨论法:学生进行小组讨论,分享排序算法的应用经验和优化策略。
3.案例分析法:通过分析实际问题,引导学生运用排序算法解决问题。
4.实验法:安排实验课,让学生动手实现排序算法,并分析其性能。
四、教学资源为了支持本课程的教学内容和教学方法的实施,准备以下教学资源:1.教材:选择一本合适的教材,如《数据结构与算法》。
2.参考书:提供相关的参考书籍,如《排序与搜索》。
3.多媒体资料:制作PPT、教学视频等多媒体资料,以便于讲解和演示。
4.实验设备:准备计算机、网络等实验设备,以便于学生进行实验操作。
五、教学评估本课程的评估方式包括平时表现、作业和考试等。
评估方式应客观、公正,能够全面反映学生的学习成果。
具体安排如下:1.平时表现:通过观察学生在课堂上的参与度、提问和回答问题的表现,评估学生的学习态度和理解程度。
课课程设计排序综合一、教学目标本课程的教学目标是使学生掌握排序综合的基本概念、原理和方法,能够运用排序综合的思路分析实际问题,并熟练使用相关工具进行数据处理和分析。
具体来说,知识目标包括:了解排序综合的基本概念和原理,掌握排序综合的主要方法和步骤,理解排序综合在实际应用中的意义和价值。
技能目标包括:能够运用排序综合的方法分析实际问题,熟练使用相关工具进行数据处理和分析,能够撰写排序综合的分析报告。
情感态度价值观目标包括:培养学生的逻辑思维能力、创新意识和团队协作精神,提高学生分析问题和解决问题的能力。
二、教学内容本课程的教学内容主要包括排序综合的基本概念、原理和方法,以及排序综合在实际应用中的案例分析。
具体来说,教学大纲安排如下:1.排序综合的基本概念和原理:介绍排序综合的定义、特点和基本原理,包括排序综合的数学基础和相关概念。
2.排序综合的主要方法和步骤:讲解排序综合的主要方法,如快速排序、归并排序、堆排序等,以及排序综合的基本步骤,包括数据预处理、排序和结果分析。
3.排序综合在实际应用中的案例分析:通过具体案例分析,使学生了解排序综合在实际问题中的应用和效果,包括数据处理和分析的过程和方法。
三、教学方法本课程的教学方法主要包括讲授法、案例分析法和实验法。
具体来说,教学方法安排如下:1.讲授法:通过教师的讲解和演示,使学生掌握排序综合的基本概念、原理和方法,以及相关工具的使用。
2.案例分析法:通过具体案例的分析,使学生了解排序综合在实际问题中的应用和效果,培养学生的分析能力和解决问题的能力。
3.实验法:通过实验操作,使学生熟练掌握相关工具的使用,提高学生的实际操作能力和实践能力。
四、教学资源本课程的教学资源主要包括教材、参考书、多媒体资料和实验设备。
具体来说,教学资源安排如下:1.教材:选择适合本课程的教材,作为学生学习的主要参考资料,包括相关概念、原理和方法的讲解,以及案例分析和实验操作的指导。
排序综合课程设计c语言一、教学目标本课程的学习目标包括知识目标、技能目标和情感态度价值观目标。
知识目标要求学生掌握C语言的基本语法、数据类型、运算符、控制结构、函数等;技能目标要求学生能够使用C语言编写简单的程序,解决实际问题;情感态度价值观目标要求学生培养编程兴趣,提高自主学习能力,培养团队协作和解决问题的能力。
二、教学内容根据课程目标,本章节的教学内容主要包括C语言的基本语法、数据类型、运算符、控制结构、函数等。
具体安排如下:1.第一课时:C语言概述,基本语法,数据类型和运算符。
2.第二课时:控制结构,函数的定义和调用。
3.第三课时:循环语句,数组和字符串。
4.第四课时:指针,引用,动态内存分配。
5.第五课时:结构体,共用体,枚举类型。
6.第六课时:文件操作,位运算。
7.第七课时:编程实践,解决实际问题。
三、教学方法本课程采用讲授法、讨论法、案例分析法和实验法等多种教学方法。
通过多样化教学方法,激发学生的学习兴趣和主动性。
1.讲授法:讲解C语言的基本语法、数据类型、运算符、控制结构、函数等知识,使学生掌握基础知识。
2.讨论法:学生进行小组讨论,分享学习心得,互相答疑解惑。
3.案例分析法:分析实际编程案例,让学生学会将所学知识应用于实际问题。
4.实验法:安排编程实验,让学生动手实践,提高编程能力。
四、教学资源本课程所需教学资源包括教材、参考书、多媒体资料和实验设备。
1.教材:选用权威、实用的C语言教材,如《C程序设计语言》(K&R)、《C Primer Plus》等。
2.参考书:提供丰富的参考书籍,如《C语言编程思想》、《C语言深度探索》等。
3.多媒体资料:制作精美的PPT课件,提供视频教程、在线编程练习等多媒体资源。
4.实验设备:配置计算机实验室,确保每位学生都能进行编程实践。
五、教学评估本课程的教学评估方式包括平时表现、作业、考试等。
评估方式应客观、公正,能够全面反映学生的学习成果。
c语言排序综合课程设计一、课程目标知识目标:1. 让学生掌握C语言中的基本排序算法,包括冒泡排序、选择排序和插入排序。
2. 使学生理解排序算法的时间复杂度和空间复杂度,并能够分析其优缺点。
3. 帮助学生了解排序算法在实际问题中的应用场景。
技能目标:1. 培养学生运用C语言编写排序算法的能力,提高代码实现技巧。
2. 培养学生通过分析问题,选择合适的排序算法解决实际问题的能力。
3. 培养学生进行程序调试和优化的技能。
情感态度价值观目标:1. 激发学生对计算机编程的兴趣,培养其主动学习的积极性。
2. 培养学生的团队合作意识,使其学会在团队中共同解决问题。
3. 培养学生面对困难时,保持坚持不懈、勇于挑战的精神。
课程性质:本课程为C语言编程实践课,以综合课程设计的形式开展,旨在巩固学生的排序算法知识,提高编程能力。
学生特点:学生已具备基本的C语言编程知识,有一定的算法基础,但编程实践能力有待提高。
教学要求:结合学生特点,注重理论与实践相结合,强调动手实践,提高学生的编程能力。
通过课程设计,使学生能够将所学知识应用于实际问题,培养解决实际问题的能力。
同时,关注学生的情感态度价值观培养,使其形成积极的学习态度和良好的团队合作精神。
将课程目标分解为具体的学习成果,以便后续教学设计和评估。
二、教学内容1. 排序算法基本原理:介绍排序算法的概念、作用和分类,重点讲解冒泡排序、选择排序和插入排序的原理。
2. 排序算法的时间复杂度和空间复杂度分析:分析三种排序算法的时间复杂度和空间复杂度,探讨不同算法的优缺点。
3. 排序算法的C语言实现:根据教材相关章节,编写冒泡排序、选择排序和插入排序的C语言代码,并讲解代码实现细节。
4. 排序算法的应用实例:结合实际问题,展示排序算法在实际应用场景中的使用,如数组排序、数据查找等。
5. 程序调试与优化:教授学生如何调试和优化排序算法,提高程序性能。
6. 课程实践:设计一系列实践任务,让学生动手编写和调试排序算法,巩固所学知识。
课程设计报告课程设计题目:综合排序的设计2014年12 月13 日目录摘要 (2)一、题目的内容及要求-------------------------------------------------------------------------------4二、需求分析--------------------------------------------------------------------------------------------4三、概要设计--------------------------------------------------------------------------------------------5四、四种排序源代码详细设计----------------------------------------------------------------------5五、程序输出的结果---------------------------------------------------------------------------------10六、运行结果及分析---------------------------------------------------------------------------------12七、收获及体会---------------------------------------------------------------------------------------13八、参考文献-------------------------------------------------------------------------------------------14摘要数据结构是由数据元素依据某种逻辑联系组织起来的。
《数据结构》课程设计报告学生姓名:学号:学院: 理学院班级:题目: 题目33 排序综合指导教师:职称:讲师实验师讲师2012年12月28日目录目录 (I)一、选题背景 (1)1.1 背景 (1)1.2 摘要 (1)1.3 性能比较.............................................. 错误!未定义书签。
1.4 总体框架 (2)1.5 操作函数说明 (2)二、算法设计 (3)2.1 插入排序 (3)2.2 希尔排序 (3)2.3 折半插入排序 (4)2.4 冒泡排序 (4)2.5 快速排序 (4)2.6 简单选择排序 (5)2.7 归并排序 (5)三、程序及功能说明 (6)3.1 随机数生成函数 (6)3.2 文件的存储与读取 (6)3.3 插入排序 (7)3.4 希尔排序 (8)3.5 折半插入排序 (9)3.6 冒泡排序 (9)3.7 快速排序 (10)3.8 简单选择排序 (11)3.9 归并排序 (12)3.10 退出函数 (13)3.11 菜单函数 (14)四、结果分析 (18)4.1 操作说明 (18)4.2 运行时间 (22)五、总结 (26)六、课程设计心得体会 (27)参考文献 (30)源程序 (31)文件内容 (43)一、选题背景1.1 摘要该课程设计的主要内容是:设计一个对生成的随机数进行综合排序的程序,进行九种排序算法,并计算时间复杂度,选出两种较快的方法。
九种排序算法分别是:直接插入排序、希尔排序、折半插入排序、冒泡排序、快速排序、简单选择排序、堆排序、归并排序、基数排序。
将随机生成的数写入文件中,打开文件,则可通过不同的方法进行排序。
另外该程序还具备界面选择输入输出、文件读写等功能。
该程序还可以由用户自己设定随机数的个数与范围以及生成随机数文件的路径,设定每种排序算法的排序个数。
在综合排序这个功能中,还将每种排序算法所用时间写入到了指定文件中。
1.2 背景在学习了数据结构中排序一章节时,各种排序方法让人打开编程的视野。
借这次课程设计的机会,来更深入的了解排序,对随机生成的大量数据进行排序,并比较他们之间的优劣性,找出在这种情况下最适合的排序方法。
1.3 性能比较以计算花费的时间为准进行对比,选出两种较快的排序算法。
以此分析在每种存储结构的下九种排序算法的优劣,输出每种算法的所用时间。
并且每种排序算法所用的时间结果都能保存到指定文件中。
每种排序算法的输入数据都由产生的随机数文件中读取。
排序的个数可以由用户定义。
每种排序算法的结果都能正确的保存到相应的TXT文件中,如插入排序算法的结果保存到“插入排序算法.txt”文件中。
经过查资料,可知:排序的个数不适合过大,要求一般在20,000左右就能得出正确结果。
顺序表存储结构的排序个数不应超过200,000个,一般在200,000左右也能分出结果。
综上所述总结出自己的设计思路:(1)由用户选择要排序的数据的数目和范围,规定为20,000~200,000个,其数据是随机产生的。
(2)进入选择界面,由用户选择要进行的排序算法,选择是否调用随机数生成函数并将结果保存在文件中。
进行排序时,选择打开只输出在这两种存储结构下的排序所花费时间用于比较。
综合排序时,要比较出两种较快排序,输出结果,并将所有排序所花费的时间全部写入指定文件。
1.4 总体框架图1 总体架构图1.5 操作函数说明void creat():定义随机函数,产生随机数据void save(int f1[]):保存文件void read():读取文件void DirectInsertSort(int p[], int len):直接插入排序void ShellSort(int a[],int n):希尔排序void BinSort(int r[],int length):折半插入排序void sort(int a[N],int n):冒泡排序int my_quick(int a[],int low,int high):定义快速排序函数void buuble(int a[],int n):简单选择排序void merge(int a[N],int l_start,int l_end,int r_end):归并排序1int msort(int a[N],int start,int end):归并排序2void end():定义结束函数void menu():函数声明//控制输出格式void display(int a[],int n):菜单函数void menu():菜单函数二、算法设计2.1直接插入排序第1遍,将初始文件中的记录K1看作有序子文件,将K2插入这个子文件中。
若R2的关键字小于K1的关键字,则R2插在K1的前面,否则K2插在K1的后面。
第2遍,将K3插入前面的两个记录的有序子文件中,得到3个记录的有序子文件。
依此类推,继续进行下去,直到将Kn插入到前面的n-1个记录的有序子文件中,最后得到n个记录的有序文件。
下面是我举的一个直接插入排序的例子。
K0 K1 K2 K3 K4 K5初始关键字: 43 21 89 15 43 28第一遍排序后:21 ( 21 43 ) 89 15 43 28第二遍排序后:89 ( 21 43 89 ) 15 43 28第三遍排序后:15 ( 15 21 43 89 ) 43 28第四遍排序后:43 ( 15 21 43 43 89 ) 28第五遍排序后:28 ( 15 21 28 43 43 89 )2.2希尔排序先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。
所有距离为dl的倍数的记录放在同一个组中。
先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
(1)取一组数据(9,3,5,1,6,2,8,4,7)(2)取增量为5则分为五个组(9,2)(3,8)(5,4)(1,7)(6),对这些分组内部进行插入排序,得到:2,3,4,1,6,8,5,7,9(3)取增量为3则分为三个组(2,1,5)(3,6,7)(4,8,9)得到:1,3,4,2,6,8,5,7,9(4)取增量为1得到1,2,3,4,5,6,7,8,92.3折半插入排序折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。
由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。
在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域的首元素设置为a[low],末元素设置为a[high],则轮比较时将待插入元素与a[m],其中m=(low+high)/2相比较,如果比参考元素小,则选择a[low]到a[m-1]为新的插入区域(即high=m-1),否则选择a[m+1]到a[high]为新的插入区域(即low=m+1),如此直至low<=high不成立,即将此位置之后所有元素后移一位,并将新元素插入[high+1]。
2.4冒泡排序冒泡排序的过程很简单。
首先将第一个记录的关键字和第二个记录的关键字进行比较,若为逆序,则将两个记录交换之,然后比较第二个记录和第三个记录的关键字。
依次类推,直至第n-1个记录和第n个记录的关键字进行过比较为止。
这一过程称做第一趟冒泡排序,其结果使得关键字最大的记录被安置到最后一个记录的位置上。
然后用同样方法进行第一趟以后的排序,直到排序结束。
这里我用一个实例模拟一下:待排序记录的关键字为 7,2,5,1,9,6,8,3第一趟起泡排序的结果为 2,5,1,7,6,8,3,[9]第二趟起泡排序的结果为 2,1,5,6,7,3,[8,9]第三趟起泡排序的结果为 1,2,5,6,3,[7,8,9]第四趟起泡排序的结果为 1,2,5,3,[6,7,8,9]第五趟起泡排序的结果为 1,2,3,[5,6,7,8,9]第六趟起泡排序的结果为 1,2,3,[5,6,7,8,9]第六趟起泡排序是必须的,因为第五趟发生了交换。
2.5快速排序快速排序是对冒泡排序的一种改进。
它的基本思想是:通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。
2.6简单选择排序待排序文件有n个记录,第一趟进行n-1次比较,选出关键字最小的记录,和第一个记录交换。
第二趟进行n-2次比较,选出关键字次小记录,和第二个记录交换,……,如此下去,进行n-1趟,直至待排序文件全部有序。
举一个简单选择排序的例子:待排序记录为: 7,2,5,1,9,6,8,3第一趟7和1交换,结果为:[1],2,5,7,9,6,8,3第二趟2不动,结果为:[1,2],5,7,9,6,8,3第三趟5和3交换,结果为:[1,2,3],7,9,6,8,5第四趟7和5交换,结果为:[1,2,3,5],9,6,8,7第五趟9和6交换,结果为:[1,2,3,5,6],9,8,7第六趟7和1交换,结果为:[1,2,3,5,6,7],8,9第七趟8不动,最终结果为:[1,2,3,5,6,7,8,9]2.7归并排序二路归并排序的基本操作是将两个有序表合并为一个有序表。
设r[u…t]由两个有序子表r[u…v-1]和r[v…t]组成,两个子表长度分别为v-u、t-v+1。
合并方法为:⑴i=u;j=v;k=u;置两个子表的起始下标及辅助数组的起始下标⑵若i>v 或j>t,转⑷,其中一个子表已合并完,比较选取结束⑶选取r[i]和r[j]关键码较小的存入辅助数组rf如果r[i].key<r[j].key,rf[k]=r[i];i++;k++;转⑵否则,rf[k]=r[j];j++;k++;转⑵⑷将尚未处理完的子表中元素存入rf如果i<v,将r[i…v-1]存入rf[k…t] //前一子表非空如果j<=t,将r[i…v]存入rf[k…t] //后一子表非空⑸合并结束。
三、程序及功能说明3.1 随机数生成函数定义creat()函数用来生成不同的随机数。
该函数是用两个函数来生成随机数:rand()和srand(),前者是生成随机数,后者是获取随机种子,使随机数不断变化。
随机函数:void creat(){int i;srand(time(NULL));//srand()函数是随机数发生器的初始化函数for(i=0;i<N;i++)f[i]=rand()%N; //产生100以内的数据N个}3.2 文件的存储与读取保存文件函数中,输入存储的文件名,打开文件(若文件存在,则删除文件中的原有元素;若文件不存在,则新建一个文件),并将参数数组中的元素存储到文件中;读取文件函数中,提示输入要读取文件的文件名,读取文件中的元素,输出到数组中,并打印出来。