to get the file

Anuncio
Metodologı́a y Tecnologı́a de la Programación
Segundo Parcial
Pregunta 1 (10 ptos)
En el método de clasificación rápida (QuickSort), una técnica de partición consiste en dividir la lista en tres sublistas, las
cuales contengan los elementos menores, iguales y mayores que un pivote respectivamente. Completar la clase QuickSort
que implementa el método de ordenación rápida para listas pertenecientes al TDA Lista (inmutable) de acuerdo a la
especificación formal y métodos en Java adjuntos. Los métodos particion, concatena y ordena deberán implementarse
de forma recursiva. Se seleccionará como pivote el primer elemento de la lista.
public class QuickSort {
static private Lista[] particion(Lista l, Elemento pivote) {
// Devuelve tres listas:
//
- Lista 1: Elementos de la lista l menores que pivote
//
- Lista 2: Elementos de la lista l iguales que pivote
//
- Lista 3: Elementos de la lista l mayores que pivote
...
}
static private Lista concatena(Lista l1, Lista l2) {
// Devuelve una lista resultado de concatenar las listas l1 y l2
...
}
static public Lista ordena(Lista l) {
// Devuelve una lista con los elementos de la lista l ordenados crecientemente
...
}
} // fin class QuickSort
TDA Lista: Especificación Formal
Tipo Lista (Elemento)
Sintaxis
listavacia → Lista
inserta(Lista,Elemento) → Lista
vacia(Lista) → booleano
cabeza(Lista) → Elemento
resto(Lista) → Lista
Semántica ∀ L ∈ Lista, ∀ E ∈ Elemento
vacia(listavacia) ⇒ cierto
vacia(inserta(L,E)) ⇒ falso
cabeza(listavacia) ⇒ error
cabeza(inserta(L,E)) ⇒ E
resto(listavacia) ⇒ error
resto(inserta(L,E)) ⇒ L
Clase Lista
class Lista
Constructores
Lista()
Lista(Lista l, Elemento e)
Métodos
boolean vacia()
Elemento cabeza()
Lista resto()
Clase Elemento
class Elemento
Constructores
Elemento()
Métodos
int valor()
Resolución Segundo Parcial
Pregunta 1 (10 ptos)
public class QuickSort {
static private Lista[] particion(Lista l, Elemento pivote) {
// Devuelve tres listas:
//
- Lista 1: Elementos de la lista l menores que pivote
//
- Lista 2: Elementos de la lista l iguales que pivote
//
- Lista 3: Elementos de la lista l mayores que pivote
Lista[] aux;
if (l.vacia()) {
aux = new Lista[3];
aux[0] = new Lista();
aux[1] = new Lista();
aux[2] = new Lista();
}
else {
aux = particion(l.resto(),pivote);
int v1 = l.cabeza().valor();
int v2 = pivote.valor();
if (v1<v2) aux[0] = new Lista(aux[0],l.cabeza());
if (v1==v2) aux[1] = new Lista(aux[1],l.cabeza());
if (v1>v2) aux[2] = new Lista(aux[2],l.cabeza());
}
return aux;
}
static private Lista concatena(Lista l1, Lista l2) {
// Devuelve una lista resultado de concatenar las listas l1 y l2
if (l1.vacia()) return l2;
return new Lista(concatena(l1.resto(),l2),l1.cabeza());
}
static public Lista ordena(Lista l) {
// Devuelve una lista con los elementos de la lista l ordenados crecientemente
if (l.vacia()) return l;
Lista[] aux = particion(l,l.cabeza());
aux[0] = ordena(aux[0]);
aux[2] = ordena(aux[2]);
return concatena(concatena(aux[0],aux[1]),aux[2]);
}
} // fin class QuickSort
Descargar