• Non ci sono risultati.

Esercizi sulle tecniche di ordinamento (Fondamenti di Informatica 2 – Walter Didimo)

N/A
N/A
Protected

Academic year: 2021

Condividi "Esercizi sulle tecniche di ordinamento (Fondamenti di Informatica 2 – Walter Didimo)"

Copied!
1
0
0

Testo completo

(1)

Esercizi sulle tecniche di ordinamento

(Fondamenti di Informatica 2 – Walter Didimo)

Esercizio 1 La classe SequenzaDiStringhe consente di rappresentare una sequenza di stringhe di lunghezza qualsiasi. Lo scheletro della classe è come segue:

class SequenzaDiStringhe{

private String[] seq // memorizza la sequenza di stringhe

/* crea un’istanza della classe assumendo che la sequenza che tale istanza rappresenta sia quella passata come parametro */

public SequenzaDiStringhe (String[] seq){...}

/* ordina le stringhe della sequenza in base all’ordine alfabetico non decrescente, utilizzando il metodo merge-sort */

public void ordina (){...}

/* fornisce una descrizione della sequenza */

public String toString (){...}

}

1. Implementare la classe SequenzaDiStringhe;

2. Implementare una classe di test il cui metodo main fa inserire all’utente una sequenza di stringhe, e successivamente visualizza tale sequenza ordinata alfabeticamente.

Esercizio 2 Il Bucket Sort è una tecnica di ordinamento di sequenze di numeri naturali che può risultare più efficiente di ogni altra, a patto di assumere che tutti i numeri della sequenza siano non più grandi di una certa costante M. Assumendo di chiamare con v l’array di naturali da ordinare e con s l’array ordinato che contiene gli stessi elementi di v, la tecnica opera nel modo seguente:

1) Predispone un array bucket di interi di dimensione M+1; il valore di bucket[j] dirà quante volte il numero j è presente nell’array v da ordinare.

2) Inizializza tutti gli elementi dell’array bucket con il valore 0.

3) Scandisce l’array v una sola volta, dal primo all’ultimo elemento; ogni volta che viene visitato un elemento v[i], viene incrementato di una unità il valore di

bucket[v[i]].

4) Inizializza la posizione corrente di s con il valore 0. Scandisce l’array bucket dal primo all’ultimo elemento, e ogni volta che visita un elemento bucket[j] con valore superiore a 0, aggiunge ad s, a partire dalla sua posizione corrente, il valore j ripetuto un numero di volte pari a bucket[j].

Si chiede di:

• Implementare il seguente metodo di classe:

/* restituisce un array ottenuto ordinando l’array v

PRE: gli elementi di v assumono valori nell’intervallo [0,M]*/

public static int[] bucketSort (int[] v, int M)

• Verificare il corretto funzionamento del metodo implementato

Riferimenti

Documenti correlati

La classe ContoCorrente ha inoltre una variabile statica, di nome massimoScoperto, che indica (in valore assoluto) il massimo valore di scoperto consentito per ogni conto corrente

• Il metodo di classe static void stampaIntersezione (Intervallo interv1, Intervallo interv2), che visualizza sullo standard output tutti numeri compresi nell’intersezione tra

Scrivere inoltre una classe ProvaCoppiaDiStringhe, avente il solo metodo main, che fa inserire all’utente due stringhe e che testa tutti i metodi della classe CoppiaDiStringhe,

Scrivere il codice della classe Esame, e scrivere inoltre il codice di una classe ProvaEsame che consente, attraverso il suo metodo main, di inserire un appello di esame e tutti

• Un costruttore che consente di definire una nuova TabellaVoti; il costruttore deve prendere in ingresso un array di stringhe che definisce la sequenza dei nomi degli studenti,

• Un metodo di istanza, di nome analizza, che non ha parametri in ingresso e che restituisce sotto forma di oggetto String una descrizione comprendente: (1) il numero di numeri pari

b) il corpo della classe, che si struttura nella definizione degli attributi (variabili di istanza e di classe) e nella definizione dei metodi. - Il cast esplicito si rende

Scrivere la classe ProvaEsercizio, che fa inserire all’utente tre array di interi (a sua scelta) e che visualizza all’utente l’array calcolato e restituito dal metodo