实验一递归与分治算法编程-实验报告纸.doc
文本预览下载声明
南京信息工程大学 实验(实习)报告
实验(实习)名称 递归与分治算法编程 实验(实习)日期 得分 指导教师
院 专业 年级 班次 姓名 学号
1.实验目的:
掌握递归与分治策略的基本思想
掌握递归算法在阶乘函数、Ackerman函数、整数划分等问题上的应用
掌握二分查找、合并排序、快速排序等问题的分治算法实现
熟悉MyEclipse或Eclipse等Java开发工具的使用。
2.实验内容:
采用MyEclipse或Eclipse编程实现基于分治策略的二分查找算法。
采用MyEclipse或Eclipse编程实现基于分治策略的合并排序算法。
采用MyEclipse或Eclipse编程实现基于分治策略的合并排序算法。
实验步骤
二分查找
public class Sorting {
public static int BinarySearch(int [] a,int x, int n){
int left=0;int right = n-1;
while(left=right){
int middle = (left+right)/2;
if(x==a[middle]) return middle;
if(xa[middle]) left=middle+1;
else right = middle-1;
}
return -1;
}
public static void main(String args[]){
int x,n;
int a[]={1,3,4,5,6,13,25};
x=6;
n=7;
int s;
s=BinarySearch(a,x,n);
System.out.println(s);
合并排序
public class Mergesort {
public static void mergeSort(int []a ){
int [] b = new int[a.length];
int s=1;
while(sa.length){
mergePass(a,b,s);
s+=s;
mergePass(b,a,s);
s+=s;
}
}
public static void mergePass(int []x,int []y,int s){
int i=0;
while(i=x.length-2*s){
merge(x,y,i,i+s-1,i+2*s-1);
i=i+2*s;
}
if(i+sx.length)
merge(x,y,i,i+s-1,x.length-1);
else
for(int j=i;jx.length;j++)
y[j]=x[j];
}
public static void merge(int []c,int []d,int l,int m,int r){
int i=1,j=m+1,k=1;
while((i=m)(j=r))
if(c[i]-(c[j])=0)
d[k++]=c[i++];
else d[k++]=c[j++];
if(im)
for(int q=j;q=r;q++)
d[k++]=c[q];
else
for(int q=i;q=m;q++)
d[k++]=c[q];
}
public static void main(String args[]){
int a[]={1,7,2,6,4,5,8,3};
mergeSort(a);
for(int i=0;i8;i++)
System.out.print(a[i]);
}
}
快速排序
public class QSort {
private static void qSort(int a[],int p,int r)
{
if(p r){
int q = partition(a,p,r);
qSort(a,p,q-1);
qSort(a,q+1,r);
}
}
private static int partition(int a[],int p,int r)
{
int i=p;
int j= r + 1;
int x=a[p];
int temp;
while(true){
while((a[++i]-
显示全部