「java分治」java 分派
本篇文章给大家谈谈java分治,以及java 分派对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Java 分治法 求解一组数组元素的最大值和最小值
- 2、请教 java 分治法求最小子数组和
- 3、java用分治法查找数组元素的最大值和最小值,求大神帮我看看这段代码错在哪
- 4、java十大算法
- 5、用Java采用分治法递归求最大值和最小值,产生死循环
Java 分治法 求解一组数组元素的最大值和最小值
//求一个数组A[i...j]的最大值和最小值,分支算法,递归实现//2015.2.9//dev c++#includestdio.h#includemalloc.h int min(int a,int b){ return ab? a:b;}int max(int a,int b){ return ab? a:b;}int* MaxMin(int a[],int i,int j){ int *m=(int *)malloc(2*sizeof(int)); if(j-i+1==1){ m[0]=m[1]=a[i]; return m; } if(j-i+1==2){ if(a[i]a[j]){ m[0]=a[i]; m[1]=a[j]; } else{ m[0]=a[j]; m[1]=a[i]; } return m; } int k=(j-i+1)/2; int *m1 = MaxMin(a,i,k); int *m2 = MaxMin(a,k+1,j); m[0]=min(m1[0],m2[0]); m[1]=max(m1[1],m2[1]); return m;}int main(){ int a[128]; int n; int i; while(scanf("%d",n)!=EOF){ for(i=0;in;i++){ scanf("%d",a[i]); } int *m = MaxMin(a,0,n-1); printf("%d %d\n",m[0],m[1]); } return 0;}
请教 java 分治法求最小子数组和
这是分治求最大子数组和
首先重要点是:递归,这个是关键,何为递归,就是自己调用自己,比如这个代码中的helper方法,就是递归,该代码运行时,会自己调用自己很多次,数组就会两分,两分再两分,这样就会把大的问题分解成小的问题,最后把小的问题汇集起来得到答案。
你表达不出的东西和没理解的就是这个递归,别小看这个递归,这是本代码的关键点,最重要的部分。
java用分治法查找数组元素的最大值和最小值,求大神帮我看看这段代码错在哪
分治那个方法基本都错了:
import java.util.*;
public class Maxmin {
public int max=0;
public int min=Integer.MAX_VALUE;
public int Min(int a, int b){
if(a=b)
return a;
else
return b;
}
public int Max(int a, int b){
if(a=b)
return a;
else
return b;
}
public void min_max(int a[]){
if (a.length == 1) {
max = Max(max, a[0]);
min = Min(min, a[0]);
} else {
int m[] = new int[a.length / 2];
int n[] = new int[a.length - a.length / 2];
System.arraycopy(a, 0, m, 0, m.length);
System.arraycopy(a, m.length, n, 0, n.length);
min_max(m);
min_max(n);
}
}
public static void main(String []args){
Maxmin object= new Maxmin();
int[] array = new int[100];
for(int i=0; iarray.length; i++)
{
array[i]=(int) (Math.random()*100+1);
System.out.print(array[i]+" ");
}
object.min_max(array);
System.out.println("最大值是:"+object.max);
System.out.println("最小值是:"+object.min);
}
}
java十大算法
算法一:快速排序算法
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。
快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。
算法步骤:
1 从数列中挑出一个元素,称为 "基准"(pivot),
2 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。
算法二:堆排序算法
堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
堆排序的平均时间复杂度为Ο(nlogn) 。
算法步骤:
创建一个堆H[0..n-1]
把堆首(最大值)和堆尾互换
3. 把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置
4. 重复步骤2,直到堆的尺寸为1
算法三:归并排序
归并排序(Merge sort,台湾译作:合并排序)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
算法步骤:
1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
4. 重复步骤3直到某一指针达到序列尾
5. 将另一序列剩下的所有元素
用Java采用分治法递归求最大值和最小值,产生死循环
DEBUG了一下才看出来,递归坑人啊。。。
也建议你用DEBUG跟踪一下。。
首先这里递归了几次
float rmax = 0, rmin = 0, bmax = 0, bmin = 0;
mid = (i + j) / 2;
maxMin(i, mid, a, rmax, rmin);
当i=0,mid=1的时候,上面几行代码的最后一行执行完成,并输出了最大最小值。
之后这个一行执行完了继续往下执行,造成死循环
即i=2,j=1
关于java分治和java 分派的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。