实验八 快速排序_第1页
实验八 快速排序_第2页
实验八 快速排序_第3页
实验八 快速排序_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、HUNAN UNIVERSITY课程预习报告题 目: 快速排序 学生姓名 学生学号 2012080102 专业班级 计算机科学与技术班 完 成 日 期 一、需求分析输入的形式和输入值的范围:第一行是一个整数n,代表任务的件数。接下来一行,有n个正整数,代表每件任务所用的时间。中间用空格或者回车隔开。不对非法输入做处理,及假设用户输入都是合法的。输出的形式:输出有n行,每行一个正整数,从第一行到最后一行依次代表着操作系统要处理的任务所用的时间。按此顺序进行,则使得所有任务等待时间最小。程序所能达到的功能:在操作系统中,当有 n 件任务同时来临时,每件任务需要用时ni,输出所有任务等待的时间和最小

2、的任务处理顺序。测试数据:输入请输入任务个数:9请输入任务用时:5 3 4 2 6 1 5 7 3输出任务执行的顺序:1 2 3 3 4 5 5 6 7二、概要设计抽象数据类型为实现上述程序的功能,应以整数存储用户的第一个输入。并将随后输入的一组数据储存在整数数组中。算法的基本思想如果将任务按完成时间从小到大排序,则在完成前一项任务时后面任务等待的时间总和最小,即得到最小的任务处理顺序。采取对输入的任务时间进行快速排序的方法可以在相对较小的时间复杂度下得到从小到大的顺序序列。三、详细设计实现概要设计中定义的所有数据类型:第一次输入的正整数要求大于零,为了能够存储,采用int型定义变量。接下来输

3、入的一组整数,数据范围大于零,为了排序需要,采用线性结构存储,即int类型的数组。实现程序的具体步骤:程序主要采取快速排序的方法处理无序数列:1在序列中根据随机数确定轴值,根据轴值将序列划分为比轴值小和比轴值大的两个子序列。2对每个子序列采取从左右两边向中间搜索的方式,不断将值与轴值比较,如果左边的值大于轴值而右边的小于轴值则将二者交换,直到左右交叉。3分别对处理完毕的两个子序列递归地采取1,2步的操作,直到子序列中只有一个元素。程序各模块的伪代码:主函数int main() int n; cout<<"请输入任务个数:" cin>>n; int a

4、n; cout<<"请输入任务用时:" for(int i=0;i<n;i+)cin>>ai; qsort(a,0,n-1);/调用“快排函数” cout<<"任务执行的顺序:" for(int i=0;i<n;i+)cout<<ai<<" " /输出排序结果快速排序算法:void qsort(int a,int i,int j) if(j<=i)return;/只有一个元素 int pivotindex=findpivot(a,i,j);/调用“轴值寻找函

5、数”确定轴值 swap(a,pivotindex,j);/调用“交换函数”将轴值置末 int k=partition(a,i-1,j,aj);/调用“分割函数”根据轴值分割序列 swap(a,k,j); qsort(a,i,k-1);/递归调用,实现子序列的调序 qsort(a,k+1,j); 轴值寻找算法:/为了保证轴值的“随机性”,采用时间初始化种子。int findpivot(int a,int i,int j) srand(unsigned int)time(NULL); int n=rand()%(j-i+1)+i; /返回传入范围内的轴值 数据交换算法:void swap(int

6、a,int i,int j) int temp; temp=ai; ai=aj; aj=temp; 序列分割算法:int partition(int a,int l,int r,int &pivot) do while(a+l<pivot); while(r)!=0&&a-r>pivot); swap(a,l,r); while(l<r); swap(a,l,r); return l;/返回右边部分的首位置 算法的时空分析对于长度为n的序列,进行快速排序的效率取决于对主值的选择。随机化快速排序虽然在最坏情况下的时间复杂度仍然是O(n2),但是随机数取值不佳的概率比较低,所以大部分能够达到O(nlogn)的时间复杂度。另输入输出的时间复杂度为(n)。所以该算法的时间复杂度为O(nlogn)。函数的调用关系图输入Findpivot 确定轴值Swap 交

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论