算法分析——实验一
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法分析实验报告
实验一分治策略排序
实验目的
1)以排序问题为例,掌握分治法的基本设计策略;
2)熟练掌握合并排序算法的实现;
3)熟练掌握快速排序算法的实现;
4) 理解常见的算法经验分析方法。
实验环境
计算机、C语言程序设计环境、VC++6.0
实验步骤
算法的基本描述:
1、合并排序的基本思想描述:首先将序列分为两部分,分到每组只有两个元
素,然后对每一部分进行循环递归地合并排序,然后逐个将结果进行合并。
2、快速排序的基本思想描述:将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,最后达到排序效果。
要求:编写一个函数data-generate,生成2000个在区间[1,10000]上的随机整数,并将这些数输出到外部文件data.txt中。这些数作为本算法实验的输入数据。
程序流程图:
合并排序原理图
快速排序流程图1.生成2000个随机整数的程序:#include
#include
#include
int main()
{
FILE *fpt;
fpt = fopen("D://data.txt","w");
srand(time(0));
for(int i=0;i<2000;i++)
fprintf(fpt,"%3d\t",rand()%10000+1);
return 0;
fclose(fpt);
}
并生成data.txt文件。
2.读取data.txt文件,并排序。实现合并排序算法输入:待排数据文件data.txt;
输出:有序数据文件resultsMS.txt
合并排序算法:
#include
#include
#include
void mergesort(int a[],int n);
void merge(int a[],int b[],int i,int c[],int j);
{
int a[2000];
int i=0,j;
FILE *fpt;
fpt=fopen("D:\\data.txt","r");
if((fpt=fopen("D:\\data.txt","r"))==NULL) {
printf("\n error!");
exit(0);
}
while (fscanf(fpt,"%d",&a[i])!=EOF)
i++;
mergesort(a,2000);
fpt = fopen("D://resultMS.txt","w");
srand(time(0));
for(j=0;j<2000;j++)
{
printf("%d ",a[j]);
fprintf(fpt,"%3d\t",a[j]);
}
fclose(fpt);
return 0;
}
void mergesort(int a[],int n){
if(n<=1)
return;
int i,j;
int *b;
int *c;
b=(int *)malloc(sizeof(int)*(n/2));
c=(int *)malloc(sizeof(int)*(n-n/2));
for(i=0;i b[i]=a[i]; } for(j=0;j c[j]=a[j+n/2]; } mergesort(b,(n/2)); mergesort(c,(n-n/2)); merge(a,b,(n/2),c,(n-n/2)); } void merge(int a[],int b[],int x,int c[],int y) { int j=0; int k=0; while((i if(b[i]<=c[j]){ a[k]=b[i]; i++; } else{ a[k]=c[j]; j++; } k++; } int l; if(i==x){ for(l=j;l a[k]=c[l]; k++; } } else{ for(l=i;l a[k]=b[l]; k++; } } } 运行结果为: resultMS.txt内的数即为随机生成的数的排序。 3.实现QuickSort算法。 输入:待排数据文件data.txt; 输出:有序数据文件resultsQS.txt 程序: #include #include #include int partions(int l[],int low,int high) { int prvotkey=l[low]; l[0]=l[low]; while (low while (low