algoritmos de ordenamiento (comparación)
TRANSCRIPT
![Page 1: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/1.jpg)
Carlos Octavio Ordaz Bernal
158525
Estructuras de Datos Avanzadas
9 de septiembre 2016
Tarea 2. Comparación de Algoritmos de Ordenamiento
1. Datos Ordenados
Datos Ordenados
n
Cantidad de comparaciones
Inserción Directa
Bubble Sort Quick Sort Merge Sort Shell Sort
10 31.0 45.0 27.0 34.0 61.0
100 2695.0 4950.0 630.0 672.0 2519.0
1000 245978.0 499500.0 11259.0 9976.0 54650.0
10000 25222983.0 49995000.0 154718.0 133616.0 1234153.0
0.0
10000000.0
20000000.0
30000000.0
40000000.0
50000000.0
60000000.0
0 2000 4000 6000 8000 10000 12000
Can
tid
ad d
e C
om
par
acio
nes
n
Datos Ordenados. Cantidad de Comparaciones vs. n
Inserción Directa
Bubble Sort
Quick Sort
Merge Sort
Shell Sort
![Page 2: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/2.jpg)
Datos Ordenados
n
Tiempo en milisegundos
Inserción Directa
Bubble Sort Quick Sort Merge Sort Shell Sort
10 1.0 2.0 2.0 1.0 2.0
100 2.0 3.0 2.0 2.0 2.0
1000 33.0 67.0 4.0 5.0 12.0
10000 661.0 852.0 22.0 21.0 75.0
0.0
100.0
200.0
300.0
400.0
500.0
600.0
700.0
800.0
900.0
0 2000 4000 6000 8000 10000 12000
Tiem
po
en
mili
segu
nd
os
n
Datos Ordenados. Tiempo en ms vs. n
Inserción Directa
Bubble Sort
Quick Sort
Merge Sort
Shell Sort
![Page 3: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/3.jpg)
2. Orden Invertido
Orden Invertido
n
Cantidad de comparaciones
Inserción Directa
Bubble Sort Quick Sort Merge Sort Shell Sort
10 14.0 45.0 28.0 34.0 53.0
100 2255.0 4950.0 578.0 672.0 2426.0
1000 253522.0 499500.0 12048.0 9976.0 54689.0
10000 24772017.0 49995000.0 164140.0 133616.0 1263157.0
0.0
10000000.0
20000000.0
30000000.0
40000000.0
50000000.0
60000000.0
0 2000 4000 6000 8000 10000 12000
Can
tid
ad d
e C
om
par
acio
nes
n
Orden Invertido. Cantidad de Comparaciones vs. 'n'
Inserción Directa
Bubble Sort
Quick Sort
Merge Sort
Shell Sort
![Page 4: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/4.jpg)
Orden Invertido
n
Tiempo en milisegundos
Inserción Directa
Bubble Sort Quick Sort Merge Sort Shell Sort
10 1.0 1.0 1.0 1.0 2.0
100 4.0 4.0 2.0 1.0 2.0
1000 25.0 42.0 5.0 4.0 13.0
10000 615.0 943.0 21.0 20.0 66.0
0.0
100.0
200.0
300.0
400.0
500.0
600.0
700.0
800.0
900.0
1000.0
0 2000 4000 6000 8000 10000 12000
Tiem
po
en
mili
segu
nd
os
n
Orden Invertido. Tiempo en milisegundos vs. 'n'
Inserción Directa
Bubble Sort
Quick Sort
Merge Sort
Shell Sort
![Page 5: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/5.jpg)
3. Orden Aleatorio
Datos Aleatorios
n
Cantidad de comparaciones promedio
Inserción Directa
Bubble Sort Quick Sort Merge Sort Shell Sort
100 2470.3 4950.0 647.1 672.0 2693.0
1000 249923.1 499500.0 11079.7 9976.0 58192.5
10000 24969604.3 49995000.0 156303.9 133616.0 1300457.1
0.0
10000000.0
20000000.0
30000000.0
40000000.0
50000000.0
60000000.0
0 2000 4000 6000 8000 10000 12000
Can
tid
ad d
e co
mp
arac
ion
es p
rom
edio
n
Datos Aleatorios. Cantidad de comparaciones promedio vs. n
Inserción Directa
Bubble Sort
Quick Sort
Merge Sort
Shell Sort
![Page 6: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/6.jpg)
Datos Aleatorios
n
Tiempo en milisegundos promedio
Inserción Directa
Bubble Sort Quick Sort Merge Sort Shell Sort
100 3.6 6.5 4.1 1.1 3.5
1000 35.4 59.7 9.5 5.3 14.4
10000 628.4 835.5 27.4 22.2 79.6
0.0
100.0
200.0
300.0
400.0
500.0
600.0
700.0
800.0
900.0
0 2000 4000 6000 8000 10000 12000
Tiem
po
en
ms
n
Datos Aleatorios. Tiempo en ms Promedio vs. n
Inserción Directa
Bubble Sort
Quick Sort
Merge Sort
Shell Sort
![Page 7: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/7.jpg)
Anexo: Código.
Clase Película
package tarea2; /** * * Carlos Octavio Ordaz Bernal * 08-09-16 */ public class Pelicula implements Comparable { public int folio; public int año; public String titulo; public Pelicula(){ folio = 0; año = 0; titulo = null; } public Pelicula(int folio, int año, String titulo){ this.folio = folio; this.año = año; this.titulo = titulo; } public int getFolio() { return folio; } public void setFolio(int folio) { this.folio = folio; } public int getAño() { return año; } public void setAño(int año) { this.año = año; } public String getTitulo() { return titulo; } public void setTitulo(String titulo) { this.titulo = titulo; }
![Page 8: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/8.jpg)
public String toString(){ StringBuilder cad = new StringBuilder(); cad.append("\nFolio: "+folio); cad.append("\nAño: "+año); cad.append("\nTítulo: "+titulo); cad.append("\n---------------"); return cad.toString(); } public int compareTo(Object o) { Pelicula otro = (Pelicula) o; if(this.folio == otro.folio){ return 0; } else{ if(this.folio > otro.folio){ return 1; } else{ return -1; } } } }
Clase MetodosdeOrdenamiento
package tarea2; /** * * Carlos Octavio Ordaz Bernal * 08-09-16 */ public class MetodosdeOrdenamiento { public static int comp; public static <T extends Comparable <T>> void insercionDirecta(T datos[]){ comp = 0; T temp; int pos, i, j; for(i = 0; i < datos.length; i++){ pos = i; while(pos > 0 && datos[pos].compareTo(datos[pos-1]) < 0){ comp++; temp = datos[pos-1]; datos[pos-1] = datos[pos]; datos[pos] = temp; pos--; } }
![Page 9: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/9.jpg)
} public static <T extends Comparable<T>> void ordenamientoBurbuja(T datos[]){ comp = 0; for(int i = 0; i < datos.length; i++){ for(int j = 1; j < datos.length-i; j++){ comp++; if(datos[j].compareTo(datos[j-1])<0){ T temp = datos[j]; datos[j] = datos[j-1]; datos[j-1] = temp; } } } } public static <T extends Comparable<T>> void quickSort(T datos[]){ comp = 0; quickSort(datos,0,datos.length-1); } private static <T extends Comparable<T>> void quickSort(T datos[], int exIzq, int exDer){ int pos; if(exIzq>=exDer){ return; } pos=findPartition(datos,exIzq,exDer); quickSort(datos,exIzq,pos-1); quickSort(datos,pos+1,exDer); } private static<T extends Comparable<T>> int findPartition(T datos[], int exIzq, int exDer){ int pivote=exIzq; int finalito=exDer; int i=exIzq; while(i<finalito){ comp++; if(datos[i].compareTo(datos[i+1])>=0){ T aux=datos[i]; datos[i]=datos[i+1]; datos[i+1]=aux; pivote=i+1; i++; } else{ T aux=datos[i+1]; datos[i+1]=datos[finalito]; datos[finalito]=aux; finalito--; } } return pivote; } public static <T extends Comparable<T>> void mergeSort(T datos[]){
![Page 10: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/10.jpg)
comp = 0; mergeSort(datos,0,(datos.length-1)); } private static <T extends Comparable<T>> void mergeSort(T datos[], int min, int max){ T temp[]; int izq,der; if(min==max){ return; } int tam=max-min+1; int mitad=(min+max)/2; temp=(T[])(new Comparable[tam]); mergeSort(datos,min,mitad); mergeSort(datos,mitad+1,max); izq=min; der=mitad+1; for(int i=0; i<tam; i++){ comp++; if(izq<=mitad && der<=max && datos[izq].compareTo(datos[der])<=0){ temp[i]=datos[izq]; izq++; } else if(der<=max){ temp[i]=datos[der]; der++; } else{ temp[i]=datos[izq]; izq++; } } for(int i=0; i<tam; i++){ datos[min+i]=temp[i]; } } public static <T extends Comparable<T>> void shellSort(T datos[]){ comp = 0; int gap, i; T aux; boolean temp; for(gap = datos.length/2; gap!=0; gap/=2){ temp = true; while(temp){ temp = false; for(i = gap; i<datos.length; i++){ comp++; if(datos[i-gap].compareTo(datos[i])>0){ aux = datos[i]; datos[i] = datos[i-gap]; datos[i-gap] = aux; temp = true; }
![Page 11: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/11.jpg)
} } } } }
Clase Tarea2
package tarea2; import java.io.FileReader; import java.io.BufferedReader; import java.util.Random; import java.util.StringTokenizer; /** * * Carlos Octavio Ordaz Bernal * 08-09-16 */ public class Tarea2 { public static <T> String imprimeArreglo(T datos[]){ StringBuilder cad = new StringBuilder(); for(int i = 0; i < datos.length; i++){ cad.append(datos[i] + "\t"); } return cad.toString(); } public static int[] valAleatorios (int n){ int[] a = new int[n]; Random rand = new Random(); int val; for(int i = 0; i < n; i++){ val = rand.nextInt(17770); a[i] = val; } return a; } public static void main(String[] args) { String linea; try(BufferedReader br = new BufferedReader(new FileReader("movie_titles2.txt"))){ String[] info; StringTokenizer st; String[] compil[] = new String[17770][3]; Pelicula[] peliculas; int j = 0; while((linea = br.readLine()) != null){
![Page 12: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/12.jpg)
st = new StringTokenizer(linea); info = new String[3]; for(int i=0; i<2; i++){ info[i] = st.nextToken(","); } info[2] = st.nextToken("\n").substring(1); compil[j] = info; j++; } //Datos Ordenados // int valor = 10; //Valor deseado para 'n' // peliculas = new Pelicula[valor]; // Pelicula p; // String titulo; // int año, folio; // double tiempoI, tiempoF, tiempoTot; // for(int k=0; k<valor; k++){ // folio = Integer.parseInt(compil[k][0]); // año = Integer.parseInt(compil[k][1]); // titulo = compil[k][2]; // p = new Pelicula(folio, año, titulo); // peliculas[k] = p; // } // tiempoI = System.currentTimeMillis(); // MetodosdeOrdenamiento.insercionDirecta(peliculas); // tiempoF = System.currentTimeMillis(); // tiempoTot = tiempoF-tiempoI; // System.out.println(imprimeArreglo(peliculas)); // System.out.println("Comparaciones: "+MetodosdeOrdenamiento.comp); // System.out.println("Tiempo en ms: "+tiempoTot); //Orden invertido // int valor = 10000; //Valor deseado para 'n' // peliculas = new Pelicula[valor]; // Pelicula p; // String titulo; // int indice = 0; // int año, folio; // double tiempoI, tiempoF, tiempoTot; // for(int k=valor-1; k>-1; k--){ // folio = Integer.parseInt(compil[k][0]); // año = Integer.parseInt(compil[k][1]); // titulo = compil[k][2]; // p = new Pelicula(folio, año, titulo); // peliculas[indice] = p; // indice++; // } // tiempoI = System.currentTimeMillis(); // MetodosdeOrdenamiento.shellSort(peliculas); // tiempoF = System.currentTimeMillis(); // tiempoTot = tiempoF-tiempoI; // System.out.println(imprimeArreglo(peliculas));
![Page 13: Algoritmos de Ordenamiento (Comparación)](https://reader037.vdocuments.co/reader037/viewer/2022100222/58ed07c21a28ab02318b46b9/html5/thumbnails/13.jpg)
// System.out.println("Comparaciones: "+MetodosdeOrdenamiento.comp); // System.out.println("Tiempo en ms: "+tiempoTot); //Orden Aleatorio int valor = 10000; //Valor deseado para 'n' peliculas = new Pelicula[valor]; Pelicula p; String titulo; int indice; int año, folio; double tiempoI, tiempoF, tiempoTot; int[] num = valAleatorios(valor); for(int k = 0; k < valor; k++){ indice = num[k]; folio = Integer.parseInt(compil[indice][0]); año = Integer.parseInt(compil[indice][1]); titulo = compil[indice][2]; p = new Pelicula(folio, año, titulo); peliculas[k] = p; indice++; } //System.out.println(imprimeArreglo(peliculas)); tiempoI = System.currentTimeMillis(); MetodosdeOrdenamiento.shellSort(peliculas); tiempoF = System.currentTimeMillis(); tiempoTot = tiempoF-tiempoI; //System.out.println("|||||||||||||||||||||||||"); //System.out.println(imprimeArreglo(peliculas)); System.out.println("Comparaciones: "+MetodosdeOrdenamiento.comp); System.out.println("Tiempo en ms: "+tiempoTot); } catch(Exception e){ System.err.print("Error 404. File Not Found"); } } }