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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

算法分治策略.docx

1、算法分治策略实 验 报 告(2016/2017学年 第二学期)课程名称算法分析与设计实验名称分治策略实验时间2017年3月30日指导单位计算机学院 软件工程系指导教师张怡婷学生姓名霍淇滨班级学号B15041236学院(系)计算机学院专 业软件工程实 验 报 告实验名称分治策略指导教师张怡婷实验类型验证型(第4个实验密码算法是“设计型”)实验学时2实验时间2017-3-30一、 实验目的和任务理解分治法的算法思想,阅读实现书上已有的部分程序代码并完善程序,加深对分治法 的算法原理及实现过程的理解二、 实验环境(实验设备)Visual Studio 2015三、实验原理及内容(包括操作过程、结果分

2、析等)一、用分治法实现一组无序序列的两路合并排序和快速排序。要求清楚合并排序及快速排 序的基本原理,编程实现分别用这两种方法将输入的一组无序序列排序为有序序列后输出。标头.h#includeusing namespace std;class SortableListpublic: SortableList(int mSize); SortableList(); void Input();/输入数组 void Output();/输出数组 void MergeSort();/两路合并排序 void QuickSort();/快速排序private: int *l;/数组指针 int maxSiz

3、e;/数组最大长度 int n;/数组已有元素个数 void MergeSort(int left, int right); void Merge(int left, int mid, int right); void Swap(int i, int j);/交换函数 void QuickSort(int left, int right); int Parition(int left, int right);/分割函数;SortableList:SortableList(int mSize) maxSize = mSize; l = new intmaxSize; n = 0;Sortable

4、List:SortableList() deletel;void SortableList:Input() cout 请输入待排序的数组n; for (int i = 0; i li; if (li = -1) break; n+; void SortableList:Output() for (int i = 0; i n; i+) cout li ;void SortableList:MergeSort() MergeSort(0, n - 1); void SortableList:QuickSort() QuickSort(0, n - 1); void SortableList:Me

5、rgeSort(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; while (i = mid) & (j = rig

6、ht) 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:Swap(int i, int j) int c = li; li = lj; lj = c;void SortableList:QuickSort(int left, int right) if (left right) int j = Pari

7、tion(left, right); QuickSort(left, j - 1); QuickSort(j + 1, right); int SortableList:Parition(int left, int right) int i = left, j = right + 1; do do i+; while (li lleft); if (i j) Swap(i, j); while (i j); Swap(left, j); return j;源.app#include#include标头.husing namespace std;void main() int n = 10; S

8、ortableList my1(n); SortableList my2(n); my1.Input(); my2.Input(); my1.MergeSort(); my2.QuickSort(); my1.Output(); my2.Output(); 二、采用基于“五元中值组取中值分割法”(median-of-median-of-five partitioning)的线性 时间选择算法,找出 N 个元素集合 S 中的第 k个最小的元素,使其在线性时间内解决。标头.h#includeusing namespace std;enum ResultCode OutOfBounds,Succes

9、s;class SortableListpublic: SortableList(int mSize); SortableList(); void Input(); void Output(); ResultCode Select(int &x, int k);private: int *l; int maxSize; int n; void Swap(int i, int j); void InsertSort(int left, int right); int Partition(int left, int right); int Select(int k,int left,int rig

10、ht,int r);SortableList:SortableList(int mSize) maxSize = mSize; l = new intmaxSize; n = 0;SortableList:SortableList() deletel;void SortableList:Input() cout 请输入带排序的数组n; for (int i = 0; i li; if (li = -1) break; n+; void SortableList:Output() for (int i = 0; i n; i+) cout li ;void SortableList:Swap(i

11、nt i, int j) int c = li; li = lj; lj = c;int SortableList:Partition(int left, int right) int i = left, j = right + 1; do do i+; while (li lleft); if (i j) Swap(i, j); while (i j); Swap(left, j); return j;ResultCode SortableList:Select(int &x, int k) if (n n | k = 0)return OutOfBounds; int j = Select

12、(k, 0,n - 1, 5); x = lj; return Success;int SortableList:Select(int k, int left, int right, int r) int n = right - left + 1; if (n = r) /若问题足够小,使用直接插入排序 InsertSort(left, right); return left + k - 1; /取其中的第k小元素,其下标为left+k-1 for (int i = 1; i = n / r; i+) InsertSort(left + (i - 1)*r, left + i*r - 1);

13、/二次取中规则求每组的中间值 Swap(left + i - 1, left + (i - 1)*r + (int)ceil(double)r / 2) - 1); /将每组的中间值交换到子表前部集中存放 /求二次中间值,其下标为j int j = Select(int)ceil(double)n / r / 2), left, left + (n / r) - 1, r); Swap(left, j); /二次中间值为枢纽元,并换至left处 j = Partition(left, right); /对表(子表)进行分划操作 if (k = j - left + 1) return j; /

14、返回第k小元素下标 else if (kj - left + 1) return Select(k, left, j - 1, r);/在左子表求第k小元素 else return Select(k - (j - left + 1), j + 1, right, r); /在右子表求第k-(j-left+1)小元素 void SortableList:InsertSort(int left, int right) for (int i = left+1; i left & temp lj - 1) lj = lj - 1; j-; lj = temp; 源.cpp#include标头.hvoid main() int n = 10; int x = 4; SortableList myl(n); myl.Input(); myl.Select(x,4); myl.Output();四、实验小结(包括问题和解决方法、心得体会等)1、通过实现快排和两路合并排序,加深了对相关知识的理解。2、通过五元中值组取中值分割法在实际例子中体验了分治法的应用范围和优势。五、指导教师评语 成 绩批阅人日 期

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

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