You are on page 1of 9

Metodos de Ordenacin

voy a explicar 3 algoritmos: ordenacin por el mtodo de la burbuja, ordenacin por el mtodo de insercin y ordenacin por el mtodo quicksort. Mtodo de la burbuja (Bubble sort) El mtodo de la burbuja consiste en comparar el primer elemento con el segundo, el segundo con el tercero, , hasta que en una de las comparaciones ocurra que el primer elemento a comparar es mayor que el siguiente. En tal caso, se intercambian los valores y se sigue con la comparacin. Al llegar a la ltima comparacin, se vuelve a empezar. Este proceso se repite hasta que no se produzca ningn intercambio, o en el peor de los casos, hasta n 1 vueltas (siendo n el nmero de elementos a comparar). Ejemplo:

Codigo:

1.private static void Burbuja(int[] vector) 2.{ 3. int temp; bool cambio; 4. for (int i = 1; i<= vector.Lenght; i++) 5. { 6. cambio = false; 7. for (int j = 0; j < vector.Lenght - i; j++) 8. { 9. temp = vector[j + 1]; 10. vector[j + 1] = vector[j]; 11. vector[j] = temp; 12. cambio = true; 13. } 14. } 15. if (cambio == false) break; 16. }

using System; using System.IO; namespace Ordenacion1 { public class MetodoBurbuja {

public static void Main(string[] args) int[] vector; int temp; Console.Write("Cuntos nmeros deseas ordenar? "); temp = Leer.datoInt(); vector = new int[temp]; for (int i = 0; i < temp; i++) { Console.Write("Introduce el dato " + (i+1) + " : "); vector[i] = Leer.datoInt(); } Console.Write("Vector a ordenar: [ "); for (int j = 0; j < vector.Length; j++) { Console.Write(vector[j] + " "); } Console.Write("]\n"); Burbuja(vector); Console.Write("Vector a ordenado: [ "); for (int j = 0; j < vector.Length; j++) { Console.Write(vector[j] + " "); } Console.Write("]\n"); Console.ReadKey();

} private static void Burbuja(int[] vector) { int temp, vueltas = 0; bool cambio; for (int i = 1; i <= vector.Length; i++) { cambio = false; vueltas++; for (int j = 0; j < vector.Length - i; j++) { if (vector[j] >= vector[j + 1]) { temp = vector[j + 1]; vector[j + 1] = vector[j]; vector[j] = temp; cambio = true; } } Console.Write("Vuelta " + (i) + " "); Console.Write("[ "); for (int k = 0; k < vector.Length; k++) { Console.Write(vector[k] + " "); } Console.Write("]\n"); if (cambio == false) break;

} }

} Console.WriteLine("Total Vueltas = " + vueltas);

public class Leer { public static int datoInt() { string dato; dato = System.Console.ReadLine(); return int.Parse(dato); } }

Mtodo de insercin (Insertion sort) Este mtodo consiste en insertar un elemento en la posicin correspondiente con respecto a otros dos previamente ya ordenados. Ejemplo:

Codigo: 1.private static void Insercion(int[] vector) 2.{ 3. for (int i=1; i<vector.Length; i++) 4. { 5. int temp = vector[i]; 6. int j; 7. for (j=i-1; j>=0 && vector[j]>temp; j--) 8. vector[j+1] = vector[j]; 9. vector[j+1] = temp; 10. } 11. }

using System; using System.IO; namespace Ordenacion2 { public class MetodoInsercion { public static void Main(string[] args) { int[] vector; int temp; Console.Write("Cuntos nmeros deseas ordenar? "); temp = Leer.datoInt(); vector = new int[temp]; for (int i = 0; i < temp; i++) { Console.Write("Introduce el dato " + (i+1) + " : "); vector[i] = Leer.datoInt(); } Console.Write("Vector a ordenar: [ "); for (int j = 0; j < vector.Length; j++) { Console.Write(vector[j] + " "); } Console.Write("]\n"); Insercion(vector); Console.Write("Vector a ordenado: [ "); for (int j = 0; j < vector.Length; j++) { Console.Write(vector[j] + " "); } Console.Write("]\n"); } Console.ReadKey();

private static void Insercion(int[] vector) { for (int i=1; i<vector.Length; i++) { int temp = vector[i]; int j; for (j=i-1; j>=0 && vector[j]>temp; j--) vector[j+1] = vector[j]; vector[j+1] = temp; Console.Write("Insercin "+ i + ": "); Console.Write("[ "); for (int k = 0; k < vector.Length; k++) { Console.Write(vector[k] + " "); } Console.Write("]\n"); } }

} public class Leer { public static int datoInt() { string dato; dato = System.Console.ReadLine(); return int.Parse(dato); } } }

Mtodo Quicksort El algoritmo basado en el mtodo quicksort es el ms eficiente de todos. Consiste en elegir un elemento al que llamaremos pivot, sobre el cual se van ordenando el resto de los elementos. Si es menor a la izquierda y si es mayor a la derecha. Una vez terminado el primer ciclo, se envan las listas izquierda y derecha de elementos situadas entre pivot. Este proceso se repite hasta que las listas enviadas sean de 1 solo elemento. Ejemplo:

Codigo: 1.private static void Quicksort(int[] v) 2.{ 3. Qs(v, 0, v.Length-1); 4.} 5. 6.private static void Qs(int[] vector, int primero, int ultimo) 7.{ 8. int i, j, central; 9. double pivote; 10. 11. central = (primero + ultimo) / 2; 12. pivote = vector[central]; 13. i = primero; 14. j = ultimo; 15. 16. do 17. { 18. while (vector[i] < pivote) i++; 19. while (vector[j] > pivote) j--; 20. 21. if (i <= j) 22. { 23. int temp;

24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42.

temp = vector[i]; vector[i] = vector[j]; vector[j] = temp; i++; j--; } } while (i <= j); if (primero < j) { Qs(vector, primero, j); } if (i < ultimo) { Qs(vector, i, ultimo); } }

using System; using System.IO; namespace Ordenacion3 { public class MetodoQuicksort { public static void Main(string[] args) { int[] vector; int temp; Console.Write("Cuntos nmeros deseas ordenar? "); temp = Leer.datoInt(); vector = new int[temp]; for (int i = 0; i < temp; i++) { Console.Write("Introduce el dato " + (i + 1) + " : "); vector[i] = Leer.datoInt(); } Console.Write("Vector a ordenar: [ "); for (int j = 0; j < vector.Length; j++) { Console.Write(vector[j] + " "); } Console.Write("]\n"); Quicksort(vector); Console.Write("Vector a ordenado: [ "); for (int j = 0; j < vector.Length; j++) {

Console.Write(vector[j] + " "); } Console.Write("]\n"); Console.ReadKey(); } private static void Quicksort(int[] v) { Qs(v, 0, v.Length-1); } private static void Qs(int[] vector, int primero, int ultimo) { int i, j, central; double pivote; central = (primero + ultimo) / 2; pivote = vector[central]; i = primero; j = ultimo; do {

while (vector[i] < pivote) i++; while (vector[j] > pivote) j--; if (i <= j) { int temp; temp = vector[i]; vector[i] = vector[j]; vector[j] = temp; i++; j--; }

} while (i <= j);

if (primero < j) { Qs(vector, primero, j); } if (i < ultimo) { Qs(vector, i, ultimo); }

} }

public class Leer { public static int datoInt() { string dato; dato = System.Console.ReadLine(); return int.Parse(dato); } }