数据结构课程设计排序算法的实现.docx
- 文档编号:3469988
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:13
- 大小:51.07KB
数据结构课程设计排序算法的实现.docx
《数据结构课程设计排序算法的实现.docx》由会员分享,可在线阅读,更多相关《数据结构课程设计排序算法的实现.docx(13页珍藏版)》请在冰豆网上搜索。
数据结构课程设计排序算法的实现
广东工业大学华立学院
课程设计(论文)
课程名称数据结构
题目名称排序算法的实现
学生学部(系)艺术设计与计算机
专业班级10计算机1班
学 号21011001002
学生姓名蔡晶晶
指导教师程东胜
2011年12月05日
广东工业大学华立学院
课程设计(论文)任务书
题目名称
排序算法的实现
学生学部(系)
艺术设计与计算机学部
专业班级
10计算机1班
姓名
蔡晶晶
学号
21011010102
一、课程设计(论文)的内容
排序算法的实现
二、课程设计(论文)的要求与数据
(1)需求分析
(2)概要设计
(3)详细设计
(4)编程实现
(5)测试:
提供数个测试用例
(6)符合撰写规范设计的必要说明文档
三、课程设计(论文)应完成的工作
(1)根据要求完成课题;
(2)程序书写符合规范,程序设计完善;
(3)对程序进行初步的测试;
(4)程序运行结果和过程的界面截图;
(5)根据设计规范撰写报告并按时提交;
(6)设计内容用A4纸打印并按要求装订。
四、课程设计(论文)进程安排
序号
设计(论文)各阶段内容
地点
起止日期
1
搜集资料
图书馆
12.05-12.10
2
需求分析
图书馆
12.10-12.14
3
概要设计
图书馆
12.14-5.17
4
详细设计
图书馆
12.17-12.20
5
程序实现
图书馆
12.20-12.29
6
系统测试、运行
机房
12.19-12.30
7
提交报告
12.30
五、应收集的资料及主要参考文献
[1]朱战立.数据结构.北京:
电子工业出版社,2010
[2]吴伟民,严蔚敏.数据结构(C语言版).北京:
清华大学出版社,2009
发出任务书日期:
2011年12月12日指导教师签名:
计划完成日期:
2011年12月30日教学单位责任人签章:
目录
1序言1
1.1内容1
1.2目的1
2需求分析1
2.1需求分析1
2.2功能分析2
3概要设计2
4详细设计3
5程序实现4
总结8
参考文献9
1序言
1.1内容
排序是对数据元素序列建立某种有序序列的过程。
排序的方法有许多种,不同的排序方法特点不同。
学习排序,主要有两点,一个是每种排序的算法思想,另一个是每种排序方法的性能特点。
1.2目的
通过学习排序算法,我们可以掌握各种排序的基本思想、掌握各种排序方法的算法实现、掌握各种排序方法的优劣分析及花费的时间计算、掌握各种排序方法所适应的不同场合等等。
2需求分析
2.1需求分析
排序是对数据元素序列建立某种有序排列的过程。
准确的说,排序是把一个数据元素序列整理成按关键字递增(或递减)排列的过程。
所以说,排序在生活中随处可见,并且非常重要。
2.2功能分析
开始
需要排序的数据元素
主方法:
直接插入排序方法
直接选择排序方法
冒泡排序方法
结束
3概要设计
【直接插入排序的基本思想】顺序的把待排序的数据元素按其关键字值的大小插入到已排序数据元素子集合的适当位置。
子集合的数据元素个数从只有一个数据元素开始,逐次增大,当子集合大小最终和集合大小相同时排序完毕。
【直接选择排序的基本思想】从待排序的数据元素集合中选取关键字最小的数据元素并将它与原始数据元素集合中的第一个数据元素交换位置;然后从不包括第一个位置上数据元素的集合中选取关键字最小的数据元素,并将它与数据元素集合中的第二个数据元素交换位置;重复如此,直到数据元素集合中只剩一个数据元素为止。
【冒泡排序的基本思想】设数组a中存放了n个数据元素,循环进行n-1趟如下的排序过程:
第一趟时,依次比较相邻两个数据元素a[i].key和a[i+1].key(i=0,1,2,···,n-2),若为逆序,即a[i].key>[i+1].key,则交换两个数据元素,否则不交换,这样数值最大的数据元素将被放置在a[n-1]中;第二趟时,数据元素个数减1,即数据元素个数为n-1,操作方法和第一趟的类似,这样整个n个数据元素集合中数值次大的数据元素将被放置在a[n-2]中;当第n-1趟结束时,整个n个数据元素集合中次小的数据元素将被放置在a[1]中,a[0]中放置了最小的数据元素。
4详细设计
直接排序算法,在已经排好序的序列中查找待插入的元素的插入位置,并将待插入元素插入到有序列表的过程。
直接插入排序是由两层嵌套循环组成的。
外层循环标识并决定待比较的数值。
内层循环为待比较数值确定其最终位置。
直接插入排序是将待比较的数值与它的前一个数值进行比较,所以外层循环是从第二个数值开始的。
当前一数值比待比较数值大的情况下继续循环比较,直到找到比待比较数值小的并将待比较数值置入其后一位置,结束该次循环。
值得注意的是,我们必需用一个存储空间来保存当前待比较的数值,因为当一趟比较完成时,我们要将待比较数值置入比它小的数值的后一位插入排序类似玩牌时整理手中纸牌的过程。
插入排序的基本方法是:
每步将一个待排序的记录按其关键字的大小插到前面已经排序的序列中的适当位置,直到全部记录插入完毕为止。
直接插入排序的作法是:
每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。
第一趟比较前两个数,然后把第二个数按大小插入到有序表中;第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。
直接插入排序属于稳定的排序,时间复杂性为o(n^2),空间复杂度为O
(1)。
直接选择排序也是一种简单的排序方法,它的基本思想是:
第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,第二次从R{1}~R[n-1]中选取最小值,与R[1]交换,....,第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。
冒泡排序的基本概念是:
依次比较相邻的两个数,将小数放在前面,大数放在后面。
即在第一趟:
首先比较第1个和第2个数,将小数放前,大数放后。
然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。
至此第一趟结束,将最大的数放到了最后。
在第二趟:
仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。
如此下去,重复以上过程,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。
外循环重复9次,内循环依次重复9,8,...,1次。
每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为1,2,...10-i。
5程序实现
直接插入排序算法
#include
typedefintKeyType;
typedefstruct
{
KeyTypekey;
}DataType;
voidInsertSort(DataTypea[],intn)
{
inti,j;
DataTypetemp;
for(i=0;i { temp=a[i+1]; j=i; while(j>-1&&temp.key { a[j+1]=a[j]; j--;} a[j+1]=temp; } } voidmain(void) { DataTypetest[6]={1,4,6,3,9,10}; inti,n=6; InsertSort(test,n);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课程设计 排序 算法 实现
![提示](https://static.bdocx.com/images/bang_tan.gif)