You are on page 1of 2

.

‫ חיפוש של שני איברים הגדולים ביותר במערך בשיטה רקורסיבית‬4 ‫שעור‬

.‫ כל צומת מכיל איבר של מערך ומחסנית‬,‫בונים מערך של צמתים‬

import java.util.Stack;
public class MaxMaxRecursion {
// private class Node
private class Node{ // (could be other items)
int num;
Stack<Integer> st;
public Node(int num){
this.num = num;
st = new Stack<Integer>();
}
}
// data item
Node arr[];
int size, i=-1, j=-1;
// constructor
public MaxMaxRecursion(int a[]){
size = a.length;
arr = new Node[size];
for (int i=0; i<size; i++){
arr[i] = new Node(a[i]);
}
}
private int maxMax2(int low, int high){
if (low < high){
int index = 0;
int middle = (low + high)/2;
int i = maxMax2(low, middle);
int j = maxMax2(middle+1, high);
if (arr[i].num>arr[j].num){
arr[i].st.push(arr[j].num);
index = i;
}
else{
arr[j].st.push(arr[i].num);
index = j;
}
return index;

}
else{
return low;
}
}
public void maxMax2(){
int index = maxMax2(0, size-1);
System.out.println(arr[index].num);
int max2 = arr[index].st.pop();
while(!arr[index].st.empty()){
int temp = arr[index].st.pop();
if (temp>max2) max2=temp;
}
System.out.println(max2);
}
‫פונקצית עזר‬

public static int[] ranArray(int size){


int [] a = new int[size];
for(int i=0; i<a.length; i++){
a[i] = (int)(Math.random()*a.length*10);
System.out.print(a[i]+", ");
}
System.out.println();
return a;
}

public static int max(int []a){


return maxValue(a, a.length-1);
}

public static int maxValue(int[] arr, int beg){


if (beg == 0){
return arr[0];
}
int x = maxValue(arr, beg-1);
return x>arr[beg] ? x : arr[beg];
}

‫פונקצית בדיקה‬

public static void main(String[] args) {


//int a[] = {1,10,8,9,5,20,11,18};
int []a = ranArray(11);
MaxMaxRecursion mi = new MaxMaxRecursion(a);
mi.maxMax2();
a = ranArray(11);
System.out.println(MaxMaxRecursion.max(a));
}
}

You might also like