版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验报告(2016/2017学年第二学期)课程名称算法分析与设计实验名称分治策略实验时间2017年3月30日指导单位计算机学院软件工程系指导教师张怡婷学生姓名霍淇滨班级学号B15041236学院(系)计算机学院专业软件工程实验报告实验名称分治策略指导教师张怡婷实验类型验证型(第4个实验密 码算法是“设计型”)实验学时2实验时间2017-3-30实验目的和任务理解分治法的算法思想,阅读实现书上已有的部分程序代码并完善程序,加深对分 治法的算法原理及实现过程的理解二、实验环境(实验设备)Visual Studio 2015、实验原理及内容(包括操作过程、结果分析等)一、用分治法实现一组无序序列的两
2、路合并排序和快速排序。要求清楚合并排序及快速 排序的基本原理,编程实现分别用这两种方法将输入的一组无序序列排序为有序序列后 输出。标头.h#in clude<iostream>using n amespace std;class SortableListpublic:SortableList(i nt mSize);SortableList();void In put();输入数组void Output(); 输出数组void MergeSort();两路合并排序void Quicksort。;/快速排序private:int *l;/数组指针int maxSize;/数组最大长度
3、int n;/ 数组已有元素个数void MergeSort(i nt left, int right);void Merge(int left, int mid, int right);void Swap( int i, i nt j);交换函数void QuickSort(int left, int right);分割函数int Pariti on (i nt left, int right);/;SortableList:SortableList(i nt mSize)maxSize = mSize;l = new in tmaxSize;n = 0;deletel;n"Sor
4、tableList:SortableList() void SortableList:I nput()cout << "请输入待排序的数组for (int i = 0; i < maxSize; i+) cin >> li;if (li = -1)break;n+;void SortableList:Output()for (i nt i = 0; i < n; i+)cout << li << ""void SortableList:MergeSort() MergeSort(0, n - 1); vo
5、id SortableList:QuickSort() Quicksort© 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(i nt left, int mid, int right)int *temp = new in tright
6、- left + 1;int i = left, j = mid + 1, k = 0;while (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:Swap(i nt i, i nt j)int c
7、= li;li = lj;lj = c;void SortableList:QuickSort(int left, int right) if (left < right)int j = Paritio n(left, right);QuickSort(left, j - 1);QuickSort(j + 1, right);int SortableList:Pariti on (i nt left, int right)int i = left, j = right + 1;dodo i+; while (li < lleft);do j-; while (lj > lle
8、ft);if (i < j) Swap(i, j); while (i < j);Swap (left, j); return j;源.即p#in clude<iostream>#include"标头.h"using n amespace std;void mai n()int n = 10;SortableList my1( n);SortableList my2( n);my1 .In put();my2.l nput();my1.MergeSort();my2.QuickSort();my1.0utput();my2.0utput();二、采用
9、基于“五元中值组取中值分割法” (median-of-median-of-fivepartitioning )的线性 时间选择算法,找出N个元素集合S中的第k个最小的元素,使其在线性时 间内解决。标头.h#in clude<iostream>using n amespace std;enum ResultCode OutOfBo un ds,Success;class SortableListpublic:SortableList(i nt mSize);SortableList();void In put();void Output();ResultCode Select(i n
10、t &x, i nt k); private:int *l;int maxSize;int n;void Swap(i nt i, i nt j);void In sertSort(i nt left, int right);int Partiti on (i nt left, int right);int Select(i nt k,i nt left,i nt right, int r); ;SortableList:SortableList(i nt mSize)maxSize = mSize;l = new in tmaxSize;n = 0;deletel;n"So
11、rtableList:SortableList()void SortableList:I nput()cout << "请输入带排序的数组for (int i = 0; i < maxSize; i+) cin >> li;if (li = -1)break;n+;void SortableList:Output()for (i nt i = 0; i < n; i+)cout << li << ""void SortableList:Swap(i nt i, i nt j)int c = li;li =
12、 lj;lj = c; int SortableList:Partiti on (i nt left, int 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;ResultCode SortableList:Select(i nt &x, i nt k)if (n <= 0 | k > n | k &l
13、t;= 0)return OutOfBou nds;int j = Select(k, 0,n - 1, 5);x = lj;retur n Success;int SortableList:Select(i nt k, int left, int right, i nt r)int n = right - left + 1;if (n <= r) /若问题足够小,使用直接插入排序In sertSort(left, right);return left + k - 1; /取其中的第k小元素,其下标为left+k-1for (i nt i = 1; i <= n / r; i+)I
14、n sertSort(left + (i - 1)*r, left + i*r - 1); /二次取中规则求每组的中间值Swap(left + i - 1, left + (i - 1)*r + (in t)ceil(double)r / 2) - 1); /将每组的中间值交换到子表前部集中存放/求二次中间值,其下标为jint j = Select(int)ceil(double)n / r / 2), left, left + (n / r) - 1, r);Swap (left, j); /二次中间值为枢纽元,并换至left处j = Partiti on( left, right); /对
15、表(子表)进行分划操作if (k = j - left + 1)return j; / 返回第k小元素下标else if (k<j - 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:l nsertSort(i nt left, i nt right)for (i nt i = left+1; i <= right; i+)int j = i;int temp = li;while (j > left && temp < lj - 1)lj = lj
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广东培正学院《形态构成》2023-2024学年第一学期期末试卷
- 广东农工商职业技术学院《制药工程学》2023-2024学年第一学期期末试卷
- 广东茂名幼儿师范专科学校《汽车电子控制技术》2023-2024学年第一学期期末试卷
- 广东茂名农林科技职业学院《机械制造技术基础冷》2023-2024学年第一学期期末试卷
- 人教版七年级下册英语单词
- 保定市2022高考英语阅读理解选练(4)答案
- 【高考解码】2021届高三生物二轮复习专题-物质跨膜运输、酶和ATP
- 【Ks5u发布】江苏省苏锡常镇四市2021届高三下学期教学情况调研(一)-化学-扫描版含答案
- 【Ks5u发布】江苏省徐州市2021届高三第三次质量检测-历史-扫描版含答案
- 【KS5U原创】新课标2021年高一化学暑假作业(七)
- 冠心病健康教育完整版课件
- 国家开放大学《理工英语1》单元自测8试题答案
- ITV系列电气比例阀英文说明书
- 重症患者的容量管理课件
- 期货基础知识TXT
- 六年级上册道德与法治课件-第一单元 我们的守护者 复习课件-人教部编版(共12张PPT)
- 《尖利的物体会伤人》安全教育课件
- 安全管理体系及保证措施
- 大学生自主创业证明模板
- 启闭机试运行记录-副本
- 少儿美术画画 童画暑假班 7岁-8岁 重彩 《北京烤鸭》
评论
0/150
提交评论