




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、HUNAN UNIVERSITY课程实验报告题 目: 快速排序 学生姓名 学生学号 专业班级 指导老师 李 晓 鸿 完 成 日 期 2 0 1 5年 1月 7日 一、需求分析1程序的功能由用户输入任务件数和任务时间,使用快速排序,输出使得所有任务等待时间最小的序列。2.输入的形式本程序由用户输入任务总数以及每个任务所花时间,中间用空格或换行隔开,任务总数必须为正整数。请输入任务总数:请输入各个任务所花时间:3.输出形式在对这些任务所花时间进行快速排序后,将这些数据从小到大输出任务时间。任务所花时间的排序如下:4.测试数据1.请输入任务总数:9请输入各个任务所花时间:5 3 4 2 6 1 5
2、7 3任务所花时间从小到大的排序如下:1 2 3 3 4 5 5 6 7 2. 请输入任务总数: 10请输入各个任务所花时间:6 5 1 2 3 5 4 8 6 1 任务所花时间从小到大的排序如下:1 1 2 3 4 5 5 6 6 83. 请输入任务总数:6请输入各个任务所花时间:10 10 19 45 23 5 任务所花时间从小到大的排序如下:5 10 10 19 23 454. 请输入任务总数: 8请输入各个任务所花时间:8 7 6 5 4 3 2 1任务所花时间从小到大的排序如下: 1 2 3 4 5 6 7 85. 请输入任务总数: 10请输入各个任务所花时间:2 4 6 8 1 0
3、 12 14 26 15任务所花时间从小到大的排序如下:0 1 2 4 6 8 12 14 15 26二、概要设计1.抽象数据类型将每一个元素储存在一个有序并且有限的序列中,每一个元素都有一个自己的位置,也都有一个数据类型,所以使用线性表来储存各个任务所花的时间。2. ADTADT alist数据对象:定义线性表的最大储存元素maxsize; 当前储存元素数listsize;数据关系:若listsize=0,则线性表没有元素,为空;基本操作:alist(int n)/构造函数 alist()/析构函数 bool append(int a)/增加元素3.算法的基本思想 设要排序的线性表中元素是A
4、0AN-1,首先通过时间函数余作为关键数据piot,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,通过前后指针的移动,实现快速排序。再将piot值左右两边的线性表进行快速排序,直到需要快速排序的线性表只有1个元素。4.程序基本流程程序分为三个模块:输入模块:由用户读入任务总数n以及各个任务所花时间;排序模块:对这些时间进行快速排序;输出模块:输出排序后的序列。三详细设计1.物理数据类型由于线性表长度已知,并且进行大量的交换操作,所以使用顺序表来实现。顺序表的伪代码class alistpublic:int maxsize;int listsize;int* listarry;a
5、list(int n)maxsize = n;listsize = 0;listarry = new intmaxsize;alist()deletelistarry;bool append(int a)if (listsize = maxsize)return false;listarrylistsize+ = a;return true;2. 详细设计获取piot值partationquicksort获取piot值:获取随机数,通过随机数获得piot值。为了防止随机数大于所有数,对随机数就行求余,对求余后的值加1(防止左边界为0,右边界为1的情况,(r+l)/2=0).int findpi
6、ot(int a, int b)srand(time(0);int n = rand() % (a+b)/2+1);return n;partation(划分):开始参数l.r紧挨要分割子线性表的实际边界。每一轮执行外层do循环时,l和r都将向的线性表中间移动,若在移动过程中,l遇到比piot值大的值就停止,l遇到比piot小的就停止,交换l和r所对应的值,再次移动,直到它们交叉为止。int partition(int l, int r, int &pivot)dowhile (listarry+l pivot);swap( l, r); while (l r);swap( l, r);ret
7、urn l; quicksort(快速排序):通过递归,获取piot值后,对线性表从位置i到位置j进行一次划分,通过k值获得排序后poit值所在位置,对起始位置i到k和k+1到末尾j再次快速排序。void qsort( int i, int j)if (j = i)return;int pivotindex = findpiot( i, j);int k = partition(i - 1, j, listarryj);swap( k, j);qsort( i, k - 1);qsort( k + 1, j);3 算法的时空分析及改进设想 最好情况O(nlogn),最差情况(n2)4. 输入和
8、输出的格式输入: 输入任务数量,任务时间:请输入任务数: .请输入任务时间: .cout n;alist a(n);cout 输入任务时间n;for (int i = 0; i temp;a.append(temp);输出:任务所花时间排序如下:.cout 任务所花时间排序如下n;for (int i = 0; i n; i+)cout a.listarryi ;cout endl;4 测试结果测试1测试2测试3测试4测试55 试验心得书上快速排序十分详细,用抽象数据类型做也就多了定义类。6 附录#includeiostream#includetime.husing namespace std
9、;class alistpublic:int maxsize;int listsize;int* listarry;alist(int n)maxsize = n;listsize = 0;listarry = new intmaxsize;alist()deletelistarry;bool append(int a)if (listsize = maxsize)return false;listarrylistsize+ = a;return true;int findpiot(int a, int b)srand(time(0);int n = rand() % (a+b)/2);ret
10、urn n;int partition(int l, int r, int &pivot)dowhile (listarry+l pivot);swap( l, r); while (l r);swap( l, r);return l;void qsort( int i, int j)if (j = i)return;int pivotindex = findpiot( i, j);int k = partition(i - 1, j, listarryj);swap( k, j);qsort( i, k - 1);qsort( k + 1, j);void swap( int a, int b)int temp;temp = listarrya;listarrya = listarryb;listarryb = temp;int main()int n,temp;cout n;alist a(n);cout 输入任
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人行道块料铺设施工方案及工艺方法
- 临床医生考试试题及答案
- 2025年法理学自考试题及答案
- 2025年新闻写作策划考试题及答案
- 新型呼吸监测技术探讨-洞察及研究
- 班级合作互动运水活动策划方案
- 排水管网工程施工技术方案
- 2025年精神科常见疾病治疗方案选择模拟考试卷答案及解析
- 年度工作推进会会议通知与议程范本
- 城市轨道交通安全管理与培训方案
- 2024年新高考Ⅰ卷英语真题(原卷+答案)
- 2025山东东营公安招录辅警392人考试参考试题及答案解析
- 2025四川宜宾市退役军人事务局招聘临聘人员2人考试参考题库及答案解析
- 高考语文 热点04 现代文阅读II之理论与文本互证类题(解析版)
- 预制混凝土检查井采购合同模板
- 外贸会计自学课件
- 2025年中小学《国庆节、中秋节》放假通知及安全提示
- 致敬 9.3:一场阅兵一部民族精神史诗
- (完整版)室外散水专项方案
- 智能物流行业智能化运输装备应用前景研究报告
- 2025云南黄金矿业集团股份有限公司第二次招聘8人笔试备考试题及答案解析
评论
0/150
提交评论