算法实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华北电力大学
实验报告|
|
实验名称算法设计与分析综合实验
课程名称算法设计与分析
|
|
专业班级软件12 学生姓名:
学号:成绩:
指导教师:胡朝举实验日期:
实验一分治策略—归并排序
一、实验要求
(1)编写一个模板函数:template
以及相应的一系列函数,采用分治策略,对任意具有:bool operator<(const T&x,const T&y);比较运算符的类型进行排序。
(2)与STL库中的函数std::sort(..)进行运行时间上的比较,给出比较结果,如:动态生成100万个随机生成的附点数序列的排序列问题, 给出所用的时间比较。
二、实验代码
#include <>
#include <>
#include <>
#include <>
#define MAX 50
typedef struct {
int arr[MAX+1];
int length;
}SortArr;
SortArr *CreateSortArr() {
int i = 0;
char buf[4*MAX] = "";
char *ptr = NULL;
SortArr *sortArr = (SortArr *)malloc(sizeof(SortArr));
memset(sortArr, 0, sizeof(SortArr));
printf("请输入待排序数据,以逗号分隔,以分号结束\n" "input:");
scanf("%s", buf);
ptr = buf;
sortArr->arr[i] = 0;
i = 1;
while(*ptr != ';') {
sortArr->arr[i] = atoi(ptr);
i++;
ptr = strstr(ptr, ",");
if(!ptr) { break; }
ptr++;
}
sortArr->length = (i - 1);
return sortArr; }
int merge(int arr[], int p, int q, int r) {
int i = 0;
int j = 0;
int k = 0;
int n1 = 0;
int n2 = 0;
int *leftArr = NULL;
int *rightArr = NULL;
n1 = q - p + 1;
n2 = r - q;
leftArr = (int *)malloc((n1 + 2) * sizeof(int)); rightArr = (int *)malloc((n2 + 2) * sizeof(int)); for(i = 1; i <= n1; i++)
{
leftArr[i] = arr[p+i-1];
}
for(j = 0; j <= n2; j++)
{
rightArr[j] = arr[q+j];
}
i = 1;
j = 1;
leftArr[n1+1] = INT_MAX;
rightArr[n2+1] = INT_MAX;
for(k = p; k <= r; k++)
{
if(leftArr[i] <= rightArr[j])
{
arr[k] = leftArr[i];
i++;
}
else
{
arr[k] = rightArr[j];
j++;
}
}
free(leftArr);
free(rightArr);
return 0;
}
int mergeSort(int arr[], int p, int r)
{
int q = 0;
if(p < r)
{
q = (p + r) / 2;
mergeSort(arr, p, q);
mergeSort(arr, (q+1), r);
merge(arr, p, q, r);
}
return 0;
}
int MergingSortRecursion(SortArr *sortArr) {
mergeSort(sortArr, 1, sortArr->length); return 0;
}
int PrintArray(SortArr sortArr)
{
int i = 0;
for(i = 1; i <= ; i++)
{
printf("%d,", [i]);
}
printf("\b;\n");
return 0;
}
int main()
{
SortArr *sortArr = NULL;
sortArr = CreateSortArr();
printf("\nBefore Sort:\t");
PrintArray(*sortArr);
MergingSortRecursion(sortArr);
printf("Sorted Array:\t");
PrintArray(*sortArr);
free(sortArr);
return 0;
}
实验二贪心算法—Huffman树及Huffman编码
一、实验要求
一个记录字符及出现频率的文件如下所示:
,7,a,45,b,13,c,12,d,16,e,89,f,34,g,20
试编写一个读取此种格式文件类CHuffman, 内部机制采用优先队列,用于建立Huffman树及进行Huffman编码输出,其用法可以如下所示:
CHuffman hm("");
();
();
();eight=weight[i];
else
haffTree[i].weight=0;
arent=0;
haffTree[i].flag=0;
haffTree[i].leftChild=-1;
haffTree[i].rightChild=-1;
}
eight { m2=m1; x2=x1; m1=haffTree[j].weight; x1=j; } else if(haffTree[j].weight { m2=haffTree[j].weight;