ESERCIZI PROPOSTI * implementare la linear search in modo ricorsivo * implementare una procedura di inserimento di un elemento in un array ordinato * implementare una procedura di estrazione di un elemento da un array ordinato * implementere bubblesort in modo completamente ricorsivo * implementare il seguente algoritmo di sorting ricorsivo (mergesort) 1 dividere l'array V in due parti uguali (+-1) V1 e V2 2 invocare ricorsivamente mergesort sui due array 3 fare il merge dei due array * scrivere una procedura che prende in ingresso un vettore ORDINATO v, la sua dimensione d, e un nuovo elemento x, e inserisca x nel vettore in modo ordinato. Il vettore passato deve avere almeno d+1 elementi. Esempio: v = [1 3 4 6 8] d = 5 x = 7 ===> v = [1 3 4 6 7 8] d = 6 * scrivere una procedura che prende in ingresso due vettori ORDINATI v1 e v2 di dimensione d1 e d2 e restituisce un vettore ORDINATO v di dimensione d1+d2 che contiene tutti gli elementi che stanno in v1 e v2. Esempio: v1=[2 4 6 8], d1 = 4 v2=[1 2 5 7 8], d1 = 5 ==> v3=[1 2 2 4 5 6 7 8 8] * riscrivere la funzione binary_search come tail recursive * Descrivere il LOOP INVARIANT (invariante di ciclo) dei seguenti cicli: - il ciclo esterno di bubblesort (vedi bubblesort_nocomment.cc) - il ciclo interno di bubblesort (vedi bubblesort_nocomment.cc) - in ciclo di merge (vedi merge.cc) * Descrivere il LOOP INVARIANT (invariante di ciclo) dei seguenti cicli: - il ciclo di linear search (vedi linear_search.cc) - il ciclo di binary search (vedi binary_search.cc) --- guarda "15 Sorting Algorithms in 6 Minutes" http://www.youtube.com/watch?v=kPRA0W1kECg guarda ineffective_sorts.png :-) da http://www.xkcd.com/1185/