算法分析——实验一

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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=prvotkey)

相关文档
最新文档