You are on page 1of 3

1 ‫פתרון של תרגיל כיתה‬

1) ‫חישוב של מספר מכוניות‬


import java.util.Arrays;
public class CalcCars {
// the start element index
int headInd = 0;
// number of cars
int size = 0;
// constructor
public CalcCars(int []arr){
this.size = arr.length;
this.headInd = (int)(Math.random()*size);
}
// address calculation
private int convert(int index){
return (index+headInd)%size;
}
// number of cars calculation
public int calcSize(int []arr){
// count - number of cars
int count = 1+headInd;
// the start element
int headElem = arr[convert(headInd)];
int change = -1;
boolean headExists = true;
while(headExists){
while(headElem != arr[convert(count)]){
count++;
}
arr[convert(count)] = change;
if (arr[convert(count)]== arr[convert(headInd)]){
headExists = false;
}
}
return count-headInd;
}
public static void main(String[] args) {
int size = 12;
int arr[] = new int[size];
for (int i=0;i<size;i++){
arr[i] = (int)(Math.random()*size);
}
CalcCars cc = new CalcCars(arr);
System.out.println(Arrays.toString(arr));
System.out.println("size = "+cc.calcSize(arr));
System.out.println(Arrays.toString(arr));
}
}

1
."‫) חיפוש של איבר קטן ביותר וגדול ביותר בעזרת אלגוריתם של "זוגות‬2
.‫חיפוש של איבר קטן ביותר וגדול ביותר בעזרת אלגוריתם סטנדרטי וחישוב של מסר השוואות‬
import java.util.Arrays;
public class MinMax {
//
// Search of maximum && minimum elements by pairs
public static int[] MiniMaxi2(int []arr){
int min, max;
int len = arr.length;
if (arr[0]<arr[1]){
min = arr[0];
max = arr[1];
}
else{
min = arr[1];
max = arr[0];
}
for (int i=2; i<(2*(len/2)); i=i+2){
if(arr[i]<arr[i+1]){
if(arr[i]<min) min = arr[i];
if(arr[i+1]>max) max = arr[i+1];
}
else{
if(arr[i+1]<min) min = arr[i+1];
if(arr[i]>max) max = arr[i];
}
}
if (len%2!=0){
if (arr[len-1]>max){
max = arr[len-1];
}
else{
if (arr[len-1]<min){
min = arr[len-1];
}
}
}
int [] ans = new int[2];
ans[0] = min;
ans[1] = max;
return ans;
}
// standard algorithm for search of maximum && minimum elements
public static int maxMinArr(int []arr){
int max = arr[0], min = arr[0], count = 0;;
for (int i=1; i<arr.length; i++){
count++;
if(arr[i] < min){
min = arr[i];
}
else{
count++;
if(arr[i] > max){
max = arr[i];
}
}
2
}
return count;
}
// get random array
public static int[] randArr(int size, int to){
int arr[] = new int[size];
for (int i=0; i<arr.length; i++){
arr[i] = (int)(Math.random()*to);
}
return arr;
}
// number of comparisons in standard algorithm
public static double meanNumOfComparisons (){
int size = 100, num = 10000, count = 0;
for (int i=0; i<num; i++){
int [] arr = randArr(size, size*2);
count = count + maxMinArr(arr);
}
return ((double)count)/num;
}

public static void main(String[] args) {


int size = 17;
int arr[] = randArr(size, size*2);
// 3/2 min-max
arr = randArr(size, size*2);
int mm[] = MiniMaxi2(arr);
Arrays.sort(arr);
System.out.println(Arrays.toString(arr));
System.out.println("min="+mm[0]+", max="+mm[1]);
// number of changes
System.out.println("num of changes: "+meanNumOfComparisons ());
}
}

You might also like