You are on page 1of 4

:‫חיפוש שני איברים הגדולים ביותר במערך‬ 2 ‫שעור‬

import java.util.Arrays;
:‫) חיפוש בזוגות‬1

// search for 2 greatest elements of an array by pairs


// the function return count - number of comparisons
// assumption: all the array's elements are different
public class MaxMax {
public static int maxMax2(int arr[], int []max12){
// max1 - the greatest element, max2 - the second greatest element
int max1, max2, count=1;
// initialization
if (arr[0]>arr[1]){
max1 = arr[0];
max2 = arr[1];
}
else{
max1 = arr[1];
max2 = arr[0];
}
// the main loop
for (int i=2; i<arr.length-1; i=i+2){
count++;
if (arr[i]>arr[i+1]){
count++;
if (arr[i]>max1){
max2 = max1;
max1 = arr[i];
count++;
if (arr[i+1]>max2) max2 = arr[i+1];
}
else{
count++;
if (arr[i]>max2) max2 = arr[i];
}
}
else{ // arr[i]<arr[i+1]
count++;
if (arr[i+1]>max1){
max2 = max1;
max1 = arr[i+1];
count++;
if (arr[i]>max2) max2 = arr[i];
}
else{
count++;
if (arr[i+1]>max2) max2 = arr[i+1];
}
}
}
// if the number of array's elements is odd:
if (arr.length%2==1){
count++;
if (arr[arr.length-1]>max1){

1
max2 = max1;
max1=arr[arr.length-1];
}
else if (arr[arr.length-1]>max2){
max2=arr[arr.length-1];
count++;
}
}
// the result:
max12[0] = max1;
max12[1] = max2;
return count;
}

a[i]>Max1 :‫) השוואה ראשונה היא‬2

// Search for two largest elements:


// the first check is: a[i]>Max1
public static int twoMaxGreatThanMax(int arr[], int []max12){
int max1, max2, count = 1;
// assumption: array length > 2
// initialization
if (arr[0]>arr[1]){
max1 = arr[0];
max2 = arr[1];
}
else{
max1 = arr[1];
max2 = arr[0];
}
// the main loop
for (int i=2; i<arr.length; i++){
count++;
if(arr[i] > max1){
max2=max1;
max1=arr[i];
}
else if(arr[i]>max2){
max2=arr[i];
count++;
}
}
// the result:
max12[0] = max1;
max12[1] = max2;
return count;
}

2
a[i]<2Max :‫) השוואה ראשונה היא‬3

// Search for two largest elements:


// the first check is: a[i]<Max2
public static int twoMaxLessThanMax(int arr[], int []max12){
int max1, max2, count = 0;
// assumption: array length > 2
if (arr[0]>arr[1]){
max1 = arr[0];
max2 = arr[1];
}
else{
max1 = arr[1];
max2 = arr[0];
}
// the main loop
for (int i=2; i<arr.length; i++){
count++;
if(arr[i] < max2){
continue;
}
else if (arr[i] < max1){
count++;
max2 = arr[i];
}
else{
max2 = max1;
max1 = arr[i];
}
}
// the result:
max12[0] = max1;
max12[1] = max2;
return count;
}
‫) פונקציות עזר‬4

// get random array with different elements


public static boolean contains(int []arr, int x, int to){
for (int i=0; i<=to; i++){
if (arr[i]==x) return true;
}
return false;
}
public static int[] randArr(int size){
int arr[] = new int[size];
int i=0;
while(i<arr.length){
int x = (int)(Math.random()*size*10);
if (!contains(arr, x, i)) arr[i++] = x;
}
return arr;
}
//

‫) תוכנית בדיקה‬5

3
public static void main(String[] args) {
// two largest elements
int size = 10000;
int max12[] = new int[2];
int arr[] = randArr(size);
int count = twoMaxGreatThanMax(arr, max12);
// a[i]>Max1
//System.out.println(Arrays.toString(arr));
System.out.println("count = "+count+", max1="+max12[0]+",
max2="+max12[1]);
// a[i]<Max2
count = twoMaxLessThanMax(arr, max12);
System.out.println("count = "+count+", max1="+max12[0]+",
max2="+max12[1]);
// maxMax2
count = maxMax2(arr, max12);
System.out.println("count = "+count+", max1="+max12[0]+",
max2="+max12[1]);
// check
Arrays.sort(arr);
System.out.println("max1="+arr[arr.length-1]+",
max2="+arr[arr.length-2]);
}
}

You might also like