Java 分治法 求解一组数组元素的最大值和最小值
2016-06-28 22:53
387 查看
分治法的思想:
将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
分治法的设计思想,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,从小的问题一个个解决,分而治之。
求解一组数组元素的最大值和最小值,传统的方法,我们可以使用遍历或者最简单的排序方法来实现,但是时间复杂度非常高,介于降低时间复杂度,我们可以采用分治法思想求出最大值和最小值。
步骤:
先求出左半部分的最大值最小值,再求出右半部分的最大值和最小值,然后把左右两部分的最大值和最小值合起来,求出最终的最大值和最小值。
这次使用Java,利用分治法实现一组数组元素的最大值和最小值。
将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。
分治法的设计思想,将一个难以直接解决的大问题,分割成一些规模较小的相同问题,从小的问题一个个解决,分而治之。
求解一组数组元素的最大值和最小值,传统的方法,我们可以使用遍历或者最简单的排序方法来实现,但是时间复杂度非常高,介于降低时间复杂度,我们可以采用分治法思想求出最大值和最小值。
步骤:
先求出左半部分的最大值最小值,再求出右半部分的最大值和最小值,然后把左右两部分的最大值和最小值合起来,求出最终的最大值和最小值。
这次使用Java,利用分治法实现一组数组元素的最大值和最小值。
import java.util.Scanner; public class Test2 { public static void max_min(int []a,int left,int right,int []maxnum,int []minnum) { if (left==right) //当只有一个元素时候,直接得出最大值和最小值 { maxnum[0]=a[left]; minnum[0]=a[right]; } else if (left+1==right)//当数组中有两个元素时,直接判断哪个元素大,哪个元素小 { if (a[left]>a[right]) { maxnum[0]=a[left]; minnum[0]=a[left]; } else { maxnum[0]=a[right]; minnum[0]=a[left]; } } else //当数组元素的个数大于2以上的操作。 { int m=(left+right)/2; //int lmax=0,lmin=0,rmax=0,rmin=0; int lmax[]={0}; int lmin[]={0}; int rmax[]={0}; int rmin[]={0}; max_min(a,left,m,lmax,lmin); max_min(a, m+1, right, rmax, rmin); // maxnum=lmax>rmax?lmax:rmax; // minnum=lmin<rmin?lmin:rmin; if(lmax[0]>rmax[0]) { maxnum[0]=lmax[0]; } else { maxnum[0]=rmax[0]; } if(lmin[0]<rmin[0]) { minnum[0]=lmin[0]; } else { minnum[0]=rmin[0]; } } //System.out.println("最大值:"+maxnum); //System.out.println("最小值: "+minnum); } public static void main(String[] args) { int array[]={-2,9,1,-4,6}; int []Max=new int[1]; //java对于实参传递,是采用值传递,所以要改成数组,不能直接使用变量去计算最大值和最小值。 int []Min=new int[1]; new Test2().max_min(array,0,array.length-1,Max,Min); System.out.println("最大值: "+Max[0]); System.out.println("最小值: "+Min[0]); } }
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树