线性时间选择实验报告.pdf

线性时间选择 一. 实验目的 : 1. 理解算法设计的基本步骤和各步的主要内容、基本要求; 2. 加深对递归设计方法基本思想的理解,并利用其解决现实生活中的问题; 3. 通过本次试验初步掌握将算法转化为计算机上机程序的方法。 二. 实验内容 : 1. 编写实现算法:给定 n 个元素,在这 n 个元素中找到第 key 小的元素; 2. 将输入的数据存储到指定的文本文件中,而输出数据存放到另一个文本文件中,包 括结果和具体的运行时间; 3. 对实验结果进行分析。 三. 实验操作 : 1.线性时间选择的思想 : 首先将这 n 个元素分成 5 组,利用排序算法找到其中的中位数, 再将这些中位数 排序找到整个数组的中位数 median ,以这个中位数 median 为界限, 将整个数组划分 为三部分, 小于 median ,等于 median 和大于 median 三部分, 判断 key 在哪部分中, 对那部分进行递归调用,直到找到等于 key 的元素为止。 综上判断, 其时间复杂度为: T(n)=cn (n 为实验数据的个数) ,故为线性时间。 2.快速排序 : 本次排序使用的是快速排序,快速排序是一种相对较快的排序方式,能够减少一 定的时间开销。 代码实现 : void quickSort(int List[],int low,int high){ if(low=high) return; int first=low; int last=high; int key=List[first]; while(firstlast){ while(firstlastList[last]=key) --last; List[first]=List[last]; while(firstlastList[first]=key) ++first; List[last]=List[first]; } List[first]=key; quickSort(List,low,first-1); quickSort(List,last+1,high); } 3. 实验数据的输入 : 为了保证实验数据的随机性,本实验采用随机生成的方式提供数据,并将输入 输出数据存储到指定的文本文件中,需要采用 C++文件流操作,对于数据的输入, 由于 cin 对数据的读取会忽略空格和换行操作,故使用 cin 流来控制数据的输入。 输入代码实现 : int write(){ ofstream outFile; outFile.open(E:// 程序设计 /practice 1/ 算法设计与分析 / 文本文件 夹/ 线性选择数据 .txt,ios::trunc); if(!outFile.is_open()) coutoutFile cant open!endl; cout 输入随机数的范围 :endl; int length,len,start,end,j=0; cinstartend; cout 输入要查找的数据个数: endl; cinlength; len=length; int* Array=new int[length]; for(int i=0;ilength;i++){

文档评论(0)

1亿VIP精品文档

相关文档