算法设计与分析大作业报告

2018-12-04 22:22

《算法设计与分析大作业报告》

班级: 学号: 姓名:

分治法大作业报告

问题陈述:

编程实现归并排序算法和快速排序算法,输出排序结果。输入10组相同的数据,验证排序结果和完成排序的比较次数。

分治法基本思想:

分治法的基本思想是将问题分解成若干个子问题,然后求解子问题。子问题较原问题要容易些, 先得出子问题的解,由此得出原问题的解,这就是所谓“分而治之”的思想。

算法描述:

当要求解一个输入规模为n,且n的取值相当大的问题时,如果问题可以分成k个不同

子集合,得到k个不同的可独立求解的子问题,其中1

1.归并排序的思想:将A(1),??,A(N)分成两个集合,对每个集合单独分类,然后将已分类的两个序列归并成一个含N个元素分好类的元素

2.快速排序的思想:选取A的某个元素做为划分元素,然后将其他元素重新排列,使在划分元素以前出现的元素都 小于或等于它,在划分元素之后出现的划分元素都大于等于它。

程序代码:

#include #include #include

void MergeSort(int *data,int x,int y,int *temp) {

int p,q,m,i=x;

if (y-x>1) {m = x+(y-x)/2;

p = x; q = m;

MergeSort(data,x,m,temp); MergeSort(data,m,y,temp);

}

while(p

for(i=x;i

data[i] = temp[i]; }

if (q>=y||(p

{temp[i++] = data[q++];}

void HoareSort(int *data,int x,int y) {

int p=x,q=y-1,temp; while(p

while (q>p&&data[q]>=data[p])

q--;

if (q>p) { }

while(q>p&&data[p]<=data[q])

p++;

temp = data[p],data[p] = data[q],data[q] =temp; p++;

if (p

if (p==q)

{

temp = data[p],data[p] = data[q],data[q] =temp; q--;

HoareSort(data,x,p);

}}}

HoareSort(data,p+1,y);

int main() {

int data[10],i; int temp[10]; srand(time(NULL)); for (i=0;i<10;i++) { data[i] = rand()0; } printf(\未排序排序的数据为:\\n\ for (i=0;i<10;i++) {printf(\ printf(\

printf(\归并排序的顺序为: \\n\ MergeSort(data,0,10,temp); for (i=0;i<10;i++) {printf(\ printf(\

printf(\快速排序的顺序为: \\n\ HoareSort(data,0,10); for (i=0;i<10;i++) {printf(\ printf(\ return 0; }

运行结果:

结论分析:

归并排序和快速排序都是递归排序,但是归并排序是稳定的排序方法,快速排序是不稳定的排序方法。(1)此问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质; (2)利用该问题分解出的子问题的解可以合并为该问题的解; (3)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子问题。


算法设计与分析大作业报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:九年级语文上册 诗经二首 关雎教案 长春版

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: