算法实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

华北电力大学

实验报告|

|

实验名称算法设计与分析综合实验

课程名称算法设计与分析

|

|

专业班级软件12 学生姓名:

学号:成绩:

指导教师:胡朝举实验日期:

实验一分治策略—归并排序

一、实验要求

(1)编写一个模板函数:template ,MergeSort(T *a, int n);

以及相应的一系列函数,采用分治策略,对任意具有: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;

相关文档
最新文档