分治法实现一组无序序列的两路合并排序和快速排序.doc

分治法实现一组无序序列的两路合并排序和快速排序.doc

ID:58151256

大小:209.00 KB

页数:9页

时间:2020-04-25

分治法实现一组无序序列的两路合并排序和快速排序.doc_第1页
分治法实现一组无序序列的两路合并排序和快速排序.doc_第2页
分治法实现一组无序序列的两路合并排序和快速排序.doc_第3页
分治法实现一组无序序列的两路合并排序和快速排序.doc_第4页
分治法实现一组无序序列的两路合并排序和快速排序.doc_第5页
资源描述:

《分治法实现一组无序序列的两路合并排序和快速排序.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、实验报告(2011/2012学年第一学期)课程名称算法分析与设计A实验名称分治策略实验时间年月日指导单位计算机学院软件工程系指导教师学生姓名班级学号学院(系)专业实验报告实验名称分治策略指导教师实验类型验证实验学时2实验时间一、实验目的和任务理解分治法的算法思想,阅读实现书上已有的部分程序代码并完善程序,加深对分治法的算法原理及实现过程的理解。用分治法实现一组无序序列的两路合并排序和快速排序。要求清楚合并排序及快速排序的基本原理,编程实现分别用这两种方法将输入的一组无序序列排序为有序序列后输出。二、实验环境

2、(实验设备)VC++6.08三、实验原理及内容(包括操作过程、结果分析等)实验原理1、排序是数据处理中常用的重要手段,是指将一个元素序列调整为按指定关键字值的递增(或递减)次序排列的有序序列。用分治法求解排序问题的思路是,按某种方式将序列分成两个或多个子序列,分别进行排序,再将已排序的子序列合并成一个有序序列。合并排序和快速排序是两种典型的符合分治策略的排序算法。2、如果采用顺序存储的可排序表作为算法实现的数据结构,则需要定义一个可排序表类SortableList,两路合并算法和快速排序算法均由定义在该类上

3、的函数实现。其中Input函数和Output函数分别用于向可排序表中输入待排序序列,以及输出已经排序好的序列。3、两路合并排序算法的基本思想是:将待排序元素平分成大小大致相同的两个子序列,然后对每个子序列分别使用递归的方法进行两路合并排序,直到子序列长度变为1,最后利用合并算法将得到的已排序好的两个子序列合并成一个有序的序列。两路合并排序算法的核心部分是将子问题的解组合成原问题解得合并操作。常用的操作是新建一个序列,序列的大小等于要合并的两个子序列的长度之和。比较两个子序列中的最小值,输出其中较小者到新建的

4、序列中,重复此过程直到其中一个子序列为空。如果另一个子序列中还有元素未输出,则将剩余元素依次输出到新建序列中即可。最终得到一个有序序列。4、结合书上已有的程序代码,使用分治法的快速排序算法,实现对初始序列的排序。快速排序算法的基本思想是:(1)在待排序序列K[left:right]上选择一个基准元素(通常是最左边的元素Kleft),通过一趟分划操作将序列分成左右两个子序列,左子序列中所有元素都小于等于该基准元素,有子序列中所有元素都大于等于该基准元素。则当前基准元素所在的位置位于左、右子序列的中间,即是其排

5、序完成后的最终位置。(2)通过递归调用,对左子序列和右子序列再分别进行快速排序算法的调用。(3)由于每一趟分划结束后,左子序列中的元素均不大于基准元素,右子序列中的元素均不小于基准元素。而每次分划后,对分划得到的左、右子序列的快速排序又均是就地进行,所以一旦左、右两个子序列都已分别排好序后,无需再执行任何计算,整个序列就是所要求的有序序列了。因此类中应定义成员函数QuickSort来完成递归快速排序算法的调用和成员函数5、比较合并排序和两种算法的异同。问题分解过程:合并排序——将序列一分为二即可。(十分简单

6、)快速排序——需调用Partition函数将一个序列划分为子序列。(分解方法相对较困难)子问题解合并得到原问题解的过程:合并排序——需要调用Merge函数来实现。(Merge函数时间复杂度为O(n))..快速排序——一旦左、右两个子序列都已分别排序,整个序列便自然成为有序序列。(异常简单,几乎无须额外的工作,省去了从子问题解合并得到原问题解的过程)基本程序(一)两路合并排序#includeclassSortableList{8public:SortableList(intmSize)

7、{maxSize=mSize;l=newint[maxSize];n=0;}~SortableList(){delete[]l;}voidMergeSort();voidInput();voidOutput();private:int*l;intmaxSize;intn;voidMergeSort(intleft,intright);voidMerge(intleft,intmid,intright);};voidSortableList::MergeSort(){MergeSort(0,n-1);}voi

8、dSortableList::MergeSort(intleft,intright){if(left

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。