ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:20.41KB ,
资源ID:6509929      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/6509929.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(参考文档快速排序算法实验报告推荐word版 17页.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

参考文档快速排序算法实验报告推荐word版 17页.docx

1、参考文档快速排序算法实验报告推荐word版 17页本文部分内容来自网络整理,本司不为其真实性负责,如有异议或侵权请及时联系,本司将立即删除!= 本文为word格式,下载后可方便编辑和修改! = 快速排序算法实验报告篇一:快速排序( 实验报告 附C+源码) 快速排序一、 问题描述在操作系统中,我们总是希望以最短的时间处理完所有的任务。但事情总是要一件件地做,任务也要操作系统一件件地处理。当操作系统处理一件任务时,其他待处理的任务就需要等待。虽然所有任务的处理时间不能降低,但我们可以安排它们的处理顺序,将耗时少的任务先处理,耗时多的任务后处理,这样就可以使所有任务等待的时间和最小。 只需要将n 件

2、任务按用时去从小到大排序,就可以得到任务依次的处理顺序。当有 n 件任务同时来临时,每件任务需要用时ni,求让所有任务等待的时间和最小的任务处理顺序。二、 需求分析1. 输入事件件数n,分别随机产生做完n件事所需要的时间;2. 对n件事所需的时间使用快速排序法,进行排序输出。排序时,要求轴值随机产生。 3. 输入输出格式:输入:第一行是一个整数n,代表任务的件数。接下来一行,有n个正整数,代表每件任务所用的时间。 输出:输出有n行,每行一个正整数,从第一行到最后一行依次代表着操作系统要处理的任务所用的时间。按此顺序进行,则使得所有任务等待时间最小。 4. 测试数据: 输入95 3 4 2 6

3、1 5 7 3 输出1 2 3 3 4 5 5 6 7三、 概要设计抽象数据类型因为此题不需要存储复杂的信息,故只需一个整型数组就可以了。算法的基本思想对一个给定的进行快速排序,首先需要选择一个轴值,假设输入的数组中有k个小于轴值的数,于是这些数被放在数组最左边的k个位置上,而大于周知的结点被放在数组右边的n-k个位置上。k也是轴值的下标。这样k把数组分成了两个子数组。分别对两个子数组,进行类似的操作,便能得到正确的排序结果。 程序的流程输入事件件数n-随机产生做完没个事件 所需时间-对n个时间进行 排序-输出结果 快速排序方法(因图难画,举一个实例): 初始状态 72 6 57 88 85

4、42 l r 第一趟循环 72 6 57 88 85 42 l r 第一次交换 6 72 57 88 85 42 l r 第二趟循环 6 72 57 88 85 42 r l 第二次交换 72 6 57 88 85 42 r l反转交换 6 72 57 88 85 42 r l这就是依靠轴值,将数组分成两部分的实例(特殊情况下,可能为一部分,其中42是轴值)。对分成的两部分数组,分别尽心类似的操作,便可得符合要求的结果。快速排序的函数模块;void qsort(int* array,int l,int r) if(r=l)return;int pivotIndex=l+rand()%(r-l+

5、1);/随机选定轴值swap1(array,pivotIndex,r);/将选定的轴值放到每段数组的最后 int k=partition(array,l-1,r,arrayr); /依靠轴值,将数组分/成两部分swap1(array,k,r);/将轴值放到正确的位置上qsort(array,l,k-1);/递归调用,对数组左右两部分进行排序 qsort(array,k+1,r); /*将大于轴值的放右边,小于轴值的放左边 算法实现*/ int partition(int* array,int l,int r,const int pivot) dowhile(array+lpivot); swa

6、p1(array,l,r);while(lr);swap1(array,l,r); return l;算法的时空分析快速排序在最差情况下,时间代价为(n2),但很少出现这种情况。如果快速排序找到了完美的轴值,那么整个算法的时间代价为(nn)。输入和输出的格式输入n= /提示 等待输入 输出原始序列: /提示 随机产生的n个随机数 结果:/提示 正确的排序结果四、 测试结果五、 实验心得(可选)这个实验,不难。但是关键在于理解快速排序的那个过程,如何根据轴值将数组分成两部分,然后将轴值放到合适的位置,继续对分成两部分的数组,执行类似的操作。六、 附录(实验源码)#include #include

7、 using namespace std;/产生n个随机数,存储到数组 int* crtArray(int& size) int n; cout n;/设置随机种子srand(time(NULL); int* intArray=new intn; size=n;cout 原始序列: endl; for(int i=0;in;i+) intArrayi=rand()%10;if(intArrayi=0) i-; continue;cout intArrayi ; cout endl; return intArray;/交换数组中的两个值void swap1(int* array,int& a,i

8、nt& b) int temp=arraya; arraya=arrayb; arrayb=temp; /对指定的数组部分进行分割int partition(int* array,int l,int r,const int pivot) dowhile(array+l=pivot);swap1(array,l,r); while(lr); swap1(array,l,r); return l; /快速排序的实现部分void qsort(int* array,int l,int r) if(r=l)return; int pivotIndex=r; int k=partition(array,l

9、-1,r,arrayr); swap1(array,k,r); qsort(array,l,k-1); qsort(array,k+1,r); /*主函数*/ int main() int size; int* Array; Array=crtArray(size); qsort(Array,0,size-1); cout 结果: endl; for(int i=0;isize;i+)cout Arrayi ; cout endl; return 0; 篇二:数据结构实验八 快速排序实验 报告 数据结构实验课程最终报告题 目:实验八快速排序专业班级:计算机科学与技术姓 名:XXX学 号:指导老

10、师:李晓鸿完成日期:201X.01.06一、 需求分析背景排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。假设含n个记录的序列为 R1, R2, ?, Rn 其相应的关键字序列为 K1, K2, ?,Kn 这些关键字相互之间可以进行比较,即在它们之间存在着这样一个关系 :Kp1Kp2?Kpn按此固有关系将上式记录序列重新排列为 Rp1, Rp2, ?,Rpn 的操作称作排序。排序算法是计算机科学中最重要的研究问题之一。对于排序的研究既有理论上的重要意义,又有实际应用价值。它在计算机图形、计算机辅助设计、机器人、模式识别、及统计学等领域具有广泛应用。

11、常见的排序算法有起泡排序、直接插入排序、简单选择排序、快速排序、堆排序等。 例1:有时候应用程序本身就需要对信息进行排序。为了准备客户账目,银行需要根据支票的号码对支票排序;例2:在一个绘制互相重叠的图形对象的程序中,可能需要根据一个“在上方”关系将各对象排序,以便自下而上地绘出对象。例3:在一个由n个数构成的集合上,求集合中第i小/大的数。例4:对一个含有n个元数的集合,求解中位数、k分位数。1. 问题描述在操作系统中,我们总是希望以最短的时间处理完所有的任务。但事情总是要一件件地做,任务也要操作系统一件件地处理。当操作系统处理一件任务时,其他待处理的任务就需要等待。虽然所有任务的处理时间不

12、能降低,但我们可以安排它们的处理顺序,将耗时少的任务先处理,耗时多的任务后处理,这样就可以使所有任务等待的时间和最小。 只需要将n 件任务按用时去从小到大排序,就可以得到任务依次的处理顺序。当有 n 件任务同时来临时,每件任务需要用时ni,求让所有任务等待的时间和最小的任务处理顺序。2. 程序要求实现的功能当有 n 件任务同时来临时,每件任务需要用时ni,求出让所有任务等待的时间和最小的任务处理顺序。3. 输入输出要求a) 输入要求:第一行是一个整数n,代表任务的件数。接下来一行,有n个正整数,代表每件任务所用的时间。b) 输出要求:输出有n行,每行一个正整数,从第一行到最后一行依次代表着操作

13、系统要处理的任务所用的时间。按此顺序进行,则使得所有任务等待时间最小。4. 测试数据1. 输入:请输入任务件数:-1输出:输入有误,请重新输入!2. 输入:请输入任务件数:4请输入各任务所需时间:2 4 3 0输出:输入有误,请重新输入!3. 输入:请输入任务件数:4请输入各任务所需时间:2 4 3 6输出:任务执行的先后顺序为:23464. 输入:请输入任务件数:9请输入各任务所需时间:5 3 4 2 6 1 5 7 3输出:任务执行的先后顺序为:123345567二、 概要设计(一) 函数调用关系图intint Partition(intstart,int random(int start

14、,int end) ;void change(inta,int i,int j); a,int 主函数 void QuickSort(int a,int end); start,int end);voidQuickSort(int a,int start,intend);三、 详细设计(一) 物理 数据类型 本程序所输入的任务件数和任务时间均为整数,可使用整数 int实现数据的存储。使用数组实现快速排序。(二)具体步骤和伪代码1. 输入任务件数及任务时长while(1)coutsize;while(size) /任务件数大于0,则执行该循环,否则重新输入件数int i;cout请输入各任务所需

15、时间:;for(i=0;iai;if(ai=0)cout输入有误,请重新输入!endl;break;if(i=size)break;cout输入有误,请重新输入!=start)return t;3. 数组中的两个元素交换位置void change(int aN,int i,int j)int t;t=ai;ai=aj;aj=t;4. 快速排序时对数据进行划分区域int Partition(int a,int start,int end)int temp=random(start,end);/得到随机轴值change(a,temp,end);int i=start-1;/i用来指示轴值之后插入的

16、位置int base=aend; /以最后一个数作为划分的基点for(int j=start;jend;j+)if(aj=base)i+;change(a,i,j);change(a,i+1,end);return i+1;5. 快速排序void QuickSort(int aN,int start,int end)if(enda,则由表的有序性可知,Rmid.key右侧的值都大于a,所以等于a的关键字如果存在,必然在Rmid.key左边的表中,这时high=mid-1;B)如果Rmid.keya,则等于a的关键字如果存在,必然在Rmid.key右边的表中。这时low=mid;C)如果Rmid

17、.key=a,则查找成功。(3)下一次查找针对新的查找区间,重复步骤(1)和(2)(4)在查找过程中,low逐步增加,high逐步减少,如果highlow,则查找失败。五、实验目的:本实验通过实现快速排序和折半查找算法,使学生理解如何实现快速查找和排序的基本算法思想。通过练习,加强对算法的理解,提高编程能力。六、实验内容:(1)实现数据序列的输入;(2)实现快速排序算法,并对输入的序列排序后输出;(3)实现折半查找算法,并在步骤(2)排序后的序列上,进行任意地 查找,并输出查询结果。七、实验器材(设备、元器件):PC机一台,装有C语言集成开发环境。八、数据结构与程序:#include#incl

18、ude#define MAX 1000#define FROMFILE 1typedef struct JDint key;JD;int bich(JD r,int n,int k) int low,high,mid,found;low=1; high=n; found=0;while(lowrmid.key) low=mid+1;else if(k=rmid.key) found=1;elsehigh=mid-1;if(found=1)return(mid);elsereturn(0);void quicksort(JD r,int low,int high)int i,j,k;JD x;i

19、f(low=high)return;i=low;j=high;x=ri;while(ij)while(i=x.key)j-;if(ij)ri=rj;i+;while(ij)&(ri.key=x.key)i+;if(ij)rj=ri;j-;ri=x;quicksort(r,low,j-1);quicksort(r,j+1,high);/快速排序int main()printf(欢迎使用快速排序与二分查找。nn);#ifdef FROMFILEprintf(请输入你所要查找的数组长度:); int length;scanf(%d,&length);getchar();JD alength+1;a0

20、.key=0;int i;for(i=1;i=length;i+)printf(输入第%d个数字:,i);scanf(%d,&ai.key);getchar();#elseFILE *fp;fp = fopen(test.txt,r);if(!fp)printf(文件不存在!);return 0;JD aMAX;a0.key=0;int i=1;while (fscanf(fp,%d,&ai+.key)!=EOF);int length=i-1;printf(文件内的信息:);for (i=1;ilength;i+) printf(%d ,ai.key);printf(n);length-;f

21、close(fp);#endifquicksort(a,0,length);printf(n);int key;printf(请输入你想查找的数字:);scanf(%d,&key);getchar();printf(n);int location=bich(a,length,key);printf(位置 :);for(i=1;i=length;i+)printf(%3d ,i);printf(n);printf(数字 :);for(i=1;i=length;i+)printf(%3d ,ai.key);printf(n);if(location)int count=0;printf(目标数字出现的位置:);

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1