word
word
1 / 12
word
本科实验报告
课程名称: 算法设计与分析
实验项目:分治法合并排序
贪心法作业调度
动态规划法求多段图问题
回溯法求n皇后问题
实验地点: 致远楼B503
专业班级:学号:
学生:
指导教师:
2017年3月18日
word
word
2 / 12
word
实验1 分治法合并排序
一、实验目的
2. 掌握合并排序的实现方法
二、实验容
随机产生一个整型数组,然后用合并排序将该数组做升序排列,要求输出排序前和排序后的数组。
三、实验环境
Window10;惠普笔记本;Dev cpp
算法描述和程序代码
#include<>
#include<iostream>
#include<>
#include<>
using namespace std;
#define random(x)(rand()%x);
int a[10];//合并排序函数。
void Merge(int left, int mid, int right) {
int t[11];
int i = left, j = mid + 1, k = 0;
while ((i <= mid) && (j <= right)) {
if (a[i] <= a[j])
t[k++] = a[i++];
else
t[k++] = a[j++];
}
while (i <= mid)
t[k++] = a[i++];
while (j <= right)
t[k++] = a[j++];
for (i = 0, k = left; k <= right;)
a[k++] = t[i++];
}//分划函数,并且调用合并函数。
void MergeSort(int left, int right) {
if (left < right) {
int mid = ((left + right) / 2);
word
word
3 / 12
word
MergeSort(left, mid);
MergeSort(mid + 1, right);
Merge(left, mid, right); //调用合并函数。
}
}
int main() {
int i;
cout << "排序前的数组为:";
for (i = 0; i < 10; i++) {
a[i] = random(100); //调用random函数,产生10个0-100的随机数。
cout << a[i] << " ";
}
cout << endl;
MergeSort(0, 9);
cout << "排序后的数组为:";
for (i = 0; i < 10; i++) {
cout << a[i] << " ";
}
getchar();
return 0;
}
五、实验结果截图
六、实验总结
通过编写这个程序,我进一步了解了分株算法的思想,在实际运用过程当中,尤其是在算法编写方面相对来说比拟简单,实现起来较为容易。
word
word
4 / 12
word
实验2 贪心法作业调度
一、实验目的
3. 进一步多级调度的根本思想和算法设计方法
4. 学会用贪心法分析和解决实际问题
二、实验容
设计贪心算法实现作业调度,要求按作业调度顺序输出作业序列。如n=8,效益p=(35, 30, 25, 20, 15, 10, 5, 1),时间期限 d=(4, 2, 4, 5, 6, 4, 5, 7),求该条件下的最大效益。
三、实验环境
Window10;惠普笔记本;Dev cpp
四、算法描述和程序代码
#include <iostream>
using namespace std;
const int Work[8] = { 45,30,28,25,23,15,10,1 };//所有作业按收益从大到小排序
const int maxTime[8] = { 4,7,3,2,4,6,7,5 };
class HomeWork
太原理工大学算法设计与分析报告实验报告材料 来自淘豆网m.daumloan.com转载请标明出处.