版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实 验 报 告(2011/2012学年 第一学期)课程名称算法分析与设计A实验名称分治策略实验时间年月日指导单位计算机学院软件工程系指导教师学生姓名班级学号学院(系)专 业实 验 报 告实验名称分治策略指导教师实验类型验证实验学时2实验时间一、 实验目的和任务理解分治法的算法思想,阅读实现书上已有的部分程序代码并完善程序,加深对分治法的算法原理及实现过程的理解。 用分治法实现一组无序序列的两路合并排序和快速排序。要求清楚合并排序及快速排序的基本原理,编程实现分别用这两种方法将输入的一组无序序列排序为有序序列后输出。 二、 实验环境(实验设备) VC+6.0三、实验原理及内容(包括操作过程、结果
2、分析等)实验原理1、排序是数据处理中常用的重要手段,是指将一个元素序列调整为按指定关键字值的递增(或递减)次序排列的有序序列。用分治法求解排序问题的思路是,按某种方式将序列分成两个或多个子序列,分别进行排序,再将已排序的子序列合并成一个有序序列。合并排序和快速排序是两种典型的符合分治策略的排序算法。 2、如果采用顺序存储的可排序表作为算法实现的数据结构,则需要定义一个可排序表类SortableList,两路合并算法和快速排序算法均由定义在该类上的函数实现。其中 Input函数和 Output函数分别用于向可排序表中输入待排序序列,以及输出已经排序好的序列。3、两路合并排序算法的基本思想是:将待
3、排序元素平分成大小大致相同的两个子序列,然后对每个子序列分别使用递归的方法进行两路合并排序,直到子序列长度变为1,最后利用合并算法将得到的已排序好的两个子序列合并成一个有序的序列。 两路合并排序算法的核心部分是将子问题的解组合成原问题解得合并操作。常用的操作是新建一个序列,序列的大小等于要合并的两个子序列的长度之和。比较两个子序列中的最小值,输出其中较小者到新建的序列中,重复此过程直到其中一个子序列为空。如果另一个子序列中还有元素未输出,则将剩余元素依次输出到新建序列中即可。最终得到一个有序序列。 4、结合书上已有的程序代码,使用分治法的快速排序算法,实现对初始序列的排序。快速排序算法的基本思
4、想是:(1)在待排序序列 Kleft:right上选择一个基准元素(通常是最左边的元素 Kleft),通过一趟分划操作将序列分成左右两个子序列,左子序列中所有元素都小于等于该基准元素,有子序列中所有元素都大于等于该基准元素。则当前基准元素所在的位置位于左、右子序列的中间,即是其排序完成后的最终位置。(2)通过递归调用,对左子序列和右子序列再分别进行快速排序算法的调用。(3)由于每一趟分划结束后,左子序列中的元素均不大于基准元素,右子序列中的元素均不小于基准元素。而每次分划后,对分划得到的左、右子序列的快速排序又均是就地进行,所以一旦左、右两个子序列都已分别排好序后,无需再执行任何计算,整个序列
5、就是所要求的有序序列了。因此类中应定义成员函数 QuickSort来完成递归快速排序算法的调用和成员函数5、比较合并排序和两种算法的异同。 问题分解过程: 合并排序将序列一分为二即可。 (十分简单) 快速排序需调用 Partition函数将一个序列划分为子序列。(分解方法相对较困难)子问题解合并得到原问题解的过程:合并排序需要调用 Merge函数来实现。(Merge函数时间复杂度为O(n)).快速排序一旦左、右两个子序列都已分别排序,整个序列便自然成为有序序列。(异常简单,几乎无须额外的工作,省去了从子问题解合并得到原问题解的过程) 基本程序(一) 两路合并排序#include<iost
6、ream.h> class SortableList public: SortableList(int mSize) maxSize=mSize; l=new intmaxSize; n=0; SortableList() delete l; void MergeSort(); void Input(); void Output(); private: int *l; int maxSize; int n; void MergeSort(int left,int right); void Merge(int left,int mid,int right); void SortableLi
7、st:MergeSort() MergeSort(0,n-1); void SortableList:MergeSort(int left,int right) if (left<right) int mid=(left+right)/2; MergeSort(left,mid); MergeSort(mid+1,right); Merge(left,mid,right); void SortableList:Merge(int left,int mid,int right) int *temp=new intright-left+1; int i=left,j=mid+1,k=0; w
8、hile(i<=mid)&&(j<=right) if (li<=lj) tempk+=li+; else tempk+=lj+; while (i<=mid) tempk+=li+; while (j<=right) tempk+=lj+; for (i=0,k=left;k<=right;) lk+=tempi+;void SortableList:Input() for(int i=0;i<maxSize;i+) cin>>li; n+; void SortableList:Output() for(int i=0;i
9、<maxSize;i+) cout<<li<<" " cout<<endl; void main() SortableList l(10); cout<<"请输入10个数:"<<endl; l.Input(); l.MergeSort(); l.Output();(二)快速排序#include<iostream.h>class SortableListpublic: SortableList(int mSize) maxSize=mSize; l=new intmaxSize;
10、 n=0; SortableList() delete l; void QuickSort(); void Input(); void Output();private: int *l; int maxSize; int n;void Swap(int i,int j); void QuickSort(int left,int right);int Partition(int left,int right);void SortableList:Swap(int i,int j)int c=li;li=lj;lj=c;int SortableList:Partition(int left,int
11、 right)int i=left,j=right+1;dodo i+; while (li<lleft);do j-; while (lj>lleft);if (i<j) Swap(i,j);while (i<j);Swap(left,j);return j;void SortableList:QuickSort()QuickSort(0,n-1);void SortableList:QuickSort(int left,int right)if (left<right)int j=Partition(left,right);QuickSort(left,j-1);QuickSort(j+1,right);void SortableList:Input() for(int i=0;i<maxSize;i+) cin>>li; n+; void SortableList:Output() for(int i=0;i<maxSize;i+) cout<<li<<" " cout<
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年湘教版八年级科学下册月考试卷
- 二零二五年度借调人员跨区域协作与共享三方协议3篇
- 2025年鲁人版选择性必修1生物下册阶段测试试卷
- 二零二五年度定制化钢结构施工合同范本下载2篇
- 2025年教科新版选修化学上册月考试卷
- 2025年人教五四新版第一册地理下册阶段测试试卷含答案
- 2025年岳麓版八年级科学上册阶段测试试卷
- 2025年人教新课标八年级生物下册月考试卷
- 二零二五年度房企论坛承办单位与场地维护合同3篇
- 生命教育《珍爱生命放飞梦想》课件
- 2024年执业药师继续教育专业答案
- 小学三年级下册英语(牛津上海一起点)全册语法知识点总结
- 2024秋期国家开放大学《建筑工程项目管理》一平台在线形考(作业1至4)试题及答案
- 临床5A护理模式
- 2025届高考英语一轮复习读后续写说课课件
- 洁柔形象升级与整合内容营销方案
- 2025届高考数学一轮复习建议 概率与统计专题讲座
- 广东省公务员考试笔试真题及答案
- 风险分级管控和隐患排查治理体系培训考试题参考答案
- 信息科技课程标准测(2022版)考试题库及答案
- 部编版二年级下册语文第四单元教学设计含语文园地四
评论
0/150
提交评论