文档详情

实验一递归与分治算法编程-实验报告纸.doc

发布:2017-04-17约2.45千字共4页下载文档
文本预览下载声明
南京信息工程大学 实验(实习)报告 实验(实习)名称 递归与分治算法编程 实验(实习)日期 得分 指导教师 院 专业 年级 班次 姓名 学号 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]-
显示全部
相似文档