import java.io.*; import java.util.*; public class Arrays { /*SCOPO: Questa classe fornisce un certo numero di procedure utili per manipolare array di interi */ public static void readArray (int [] a, ConsoleReader c) { //SCOPO lettura di array inserendo i valorei da tastiera for (int i=0;i= a.length)| (from < 0)) return 0; //from fuori dal range else return a[from]+SommaArrRic(a, from+1);} public static String toStringIt(int [] a){ //toString iterativo per array di interi String s="{"; for (int i=0;i=a.length) return false; else if (a[i]==x) return true; else return searchRic(a,x,i+1); } public static boolean searchSortRic (int [] a, int x,int i) { //SCOPO: ricerca di un elemento array ordinato //Usa ricorsione if(i>=a.length) return false; else if (a[i]==x) return true; else if (xa[i]) i++; else continua=false;} if (iv) return binS(a,v,min,mid); else return binS(a,v,mid+1,max); } else return -1; } public static int minPos(int [] a, int from) { /* Calcola la posizione dell'elemento piu` piccolo presente in a partendo dalla posizione from*/ int min=from; for (int i=from+1;ia[i]) min=i;} return min;} public static void swap(int [] a, int i,int j) { //System.out.println("swap scambia "+i+"e "+j); int temp =a[i]; a[i]=a[j]; a[j]=temp;} public static void selSort (int [] a) { /* MODIFICA: a*/ /* EFFETTI: ordinamento di a in senso crescente, a viene modificata in modo che i suoi elementi risultino ordinati in senso crescente. Es: se a=[3,4,1,0] prima dell'invocazione, dopo l'invocazione a-post =[0,1,3,4] algoritmo d'ordinamento per selezione dei minimi*/ for (int i=0; i 1) { msort(a,0,a.length); } } private static void msort(int [] a, int min, int max) { /*ordina la porzione di array compreso tra min e max usando l'algoritmo di merge sort*/ int mid; if (min < max-1) { mid= (min+max)/2; // System.out.println("invoc. ricorsiva intervallo "+min+" , "+mid); msort(a, min, mid); // System.out.println("invoc. ricorsiva intervallo "+mid+" , "+max); msort(a, mid, max); merge(a, min, mid, max); // System.out.println("array risultante"); // System.out.println("ordinato nella porzione "+min+" a "+(max-1)); // writeArray(a); } } private static void merge (int [] a, int min, int mid, int max) { //fai merge delle due porzioni ordinate di array comprese tra min e mid e mid e max int [] r=new int [max-min]; int i=0; int j=min; int h=mid; while (i