Mi sono implementato l'algoritmo del mergesort. L'algoritmo dei minimi e massimi simultanei dovrebbe fare questo:
1. SE LA DIMENSIONE DEL VETTORE NON SUPERA 2,ALLORA CALCOLA DIRETTAMENTE, MEDIANTE UNUNICO CONFRONTO, IL MINIMO E IL MASSIMO
2. ALTRIMENTI, DIVIDI IL VETTORE IN DUESOTTOVETTORI DELLA STESSA DIMENSIONE,CALCOLA RICORSIVAMENTE IL MINIMO MIN1E ILMASSIMO MAX1DEL PRIMO SOTTOVETTORE PRIMO SOTTOVETTORE E ILMINIMO MIN2E MAX2DEL SECONDO SECONDOSOTTOVETTORE SOTTOVETTORE
3. DETERMINA IL MINIMO E IL MASSIMO DEL VETTORE VETTORECOMPLESSIVO CONFRONTANDO MIN1 CON MIN2 E COMPLESSIVO CONFRONTANDO MIN1 CON MIN2 EMAX1 CON MAX2 MAX1 CON MAX2
come potrei modificare il codice sottostante per avere un algoritmo per il i min e massimi simultanei?
codice:/** Metodo MergeSort */ #include <string> #define MAX 10 using namespace std; typedef int start; typedef int end; typedef int Item; /* * Ricomponi i risultati ottenuti al passo precedente ed ottieni la soluzione complessiva * (impera) */ void impera(Item a[], start left, int center, end right) { Item* aux = new int[right + 1]; int i,j; for (i = center+1; i > left; i--) aux[i-1] = a[i-1]; for (j = center; j < right; j++) aux[right+center-j] = a[j+1]; for (int k = left; k <= right; k++) if (aux[j] < aux[i]) a[k] = aux[j--]; else a[k] = aux[i++]; delete [] aux; } /* * Dividi il vettore in due sottovettori di dimensione inferiore all'originale ed * esegui l'algoritmo ricorsivamente sui due sottovettori (divide) */ void divide(Item a[], start inizio,end fine) { if (inizio<fine) { int media = (inizio+fine)/2; divide(a, inizio, media); divide(a, media+1, fine); impera(a, inizio, media, fine); } }

Rispondi quotando