算法与程序设计上机报告(2)

2019-04-14 15:24

partition函数的具体扩展如下:

说明:入口参数:集合A(m:q)的头m和尾后一个位置q

出口参数:划分元素A[m]在集合A排序后的集合中的位置

6

四、源程序及实验结果

程序代码如下:

#include

int A[1024]; //A[1024]是全程数组,其中存放待分类的元素void interchange(int i,int j) //将A[i]与A[j]换位 { int t; t=A[i]; A[i]=A[j]; A[j]=t;

7

}

int partition(int m,int p) //用划分元素A[m]划分集合A(m:p-1),并返回划分元素定位后的位置 //划分元素定位后其左边的元素不大于它,其右边的元素不小于它 { int i,v;

v=A[m]; //记下划分元素的值

i=m; //记下划分元素的起始位置

while(1) //查找划分元素在排序后的集合中的位置 { do //由左向右查找不小于划分元素的元素A[i] {

i++;

}while(A[i]

do //由右向左查找不大于划分元素的元素A[p] { p--;

}while(A[p]>v);

if(i

else break; }

A[m]=A[p]; //划分元素最终定位在集合A中p处 A[p]=v; return p; }

void quicksort(int p,int q) //快速分类(本算法为递归算法)

/*将全局数组A(1:n)中的元素A[p],.....,A[q]按递增的方式分类,认为A[n+1]已被定义,且不小于A(p:q)的所有元素,即A[n+1]为正无穷大(在主函数令正无穷大为1000) */ { int j; if(p

{ j=q+1; //此时j为划分元素的起始位置

j=partition(p,j); //此时j存放的是划分元素应在排序后的集合中的位置 //依次对由划分元素划分出的两个子集合进行快速分类 quicksort(p,j-1); quicksort(j+1,q); } }

void main()

{ int i,n; //n中存放待排序元素的个数 printf(\

scanf(\ //输入待排序元素的个数 printf(\

for(i=1;i<=n;i++) //输入待排序的各个元素的值,并存放到集合A中

8

scanf(\

A[n+1]=1000;

quicksort(1,n); //调用快速分类算法对数组A(1:n)进行归并排序 for(i=1;i<=n;i++) //输出进行快速排序后的集合A printf(\ getch(); }

运行结果如下图:(运行结果与理论结果一致)

五、结果分析

运行源程序后,先输入待排序元素的个数,回车。再分别输入元素的值序列,回车,就会显示按升序排列的元素值序列。不难看出,运行结果与理论结果一致。

记最坏情况下的元素比较次数是Cw(n);PARTITION一次调用中的元素比较数是p-m+1,故每级递归调用上,元素的比较次数等于该级所处理的待分类元素数。

最坏情况下,每级递归调用的元素总数仅比上一级少1,故Cw(n)是r由n到2的累加和。 即:Cw(n)=Ο(n2)

9

上机实验三

一、 实验题目

贪心算法求背包问题

二、算法介绍

1、将若干物品装入背包,装入情况有三种:部分装入、全部装入和未装入; 2、量度标准:物品效益集合和容量集合分别按单位容量的效益增量的降序排列 3、排序方法:快速排序

三、程序流程图

说明:

存放物品的数目的变量n,数组A[1024]存放待分类元素,数组X[1024]存放解向量,数组W[1024]存放各物品的容量,数组P[1024]存放各物品的效益, 以上变量均是全局变量。

贪心算法greedy-knapsa的具体扩展如下: 说明:入口参数:背包容量m

10


算法与程序设计上机报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:生化整理

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

马上注册会员

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