Successfully reported this slideshow.

Ordenar arreglos en java

108,767 views

Published on

Algunos algoritmos que implementan las diferentes técnicas de ordenamiento de arreglos en Java

Published in: Technology

Ordenar arreglos en java

  1. 1. UNIVERSIDAD TÉCNICA PARTICULAR DE LOJA PROGRAMACION DE ALGORITMOS POR: Eylin Calderón Carrión. II Ciclo Sistemas Informáticos y Computación
  2. 2. Definición de Arreglo <ul><li>Un arreglo o array es un conjunto de datos ordenados que está formado por un número fijo de elementos contiguos y de un mismo tipo, por lo cual son estructuras estáticas. </li></ul><ul><li>Los datos individuales que se encuentran en el arreglo se llaman elementos del arreglo. </li></ul><ul><li>Para definir un tipo estructurado arreglo, se debe especificar el tipo base y el número de elementos. </li></ul><ul><li>Los arreglos se clasifican en: </li></ul><ul><ul><li>Unidimensionales (vectores o listas) </li></ul></ul><ul><ul><li>Multidimensionales ( tablas o matrices) </li></ul></ul><ul><ul><li>    </li></ul></ul>
  3. 3. Declaración, inicialización y acceso <ul><li>A los arreglos se los declara de la siguiente manera: </li></ul><ul><ul><li>Tipo_dato nombre_array[ ] </li></ul></ul><ul><ul><ul><li>Ejemplo: int meses_anio ]; </li></ul></ul></ul><ul><li>Se inicializa de la siguiente manera: </li></ul><ul><ul><li>nombre_array = tipo_dato [tamaño] </li></ul></ul><ul><ul><ul><li>Ejemplo : meses _anio= new String [12]; </li></ul></ul></ul><ul><li>Se accede al arreglo de la siguiente manera: </li></ul><ul><ul><li>Nombre_array[ posición] </li></ul></ul><ul><ul><ul><li>Ejemplo: meses[0] = “Enero”; meses[5] = “Junio”; </li></ul></ul></ul>
  4. 4. Clasificación de los Métodos de Ordenación de Arreglos <ul><li>MÉTODOS DIRECTOS: </li></ul><ul><li>Método de Intercambio Directo / Burbuja </li></ul><ul><li>Método de Inserción Directa </li></ul><ul><li>Método de Selección Directa </li></ul><ul><li>MÉTODOS AVANZADOS </li></ul><ul><li>Método de ordenación rápida / QuickSort </li></ul>
  5. 5. Métodos Directos Método de Intercambio Directo / Burbuja Este método consiste en revisar cada elemento del arreglo que vaya a ser ordenado con el siguiente, intercambiándose de posición si están en el orden equivocado. Es necesario en este método revisar varias veces todo el arreglo hasta que no se necesiten más intercambios, lo que significa que el arreglo esta ordenado completamente. Este nombre de burbuja se dice por la forma con la que suben por los elementos de los arreglos durante los intercambios, como si fueran pequeñas &quot;burbujas&quot;. También es conocido como el método del intercambio directo, ya que solo usa comparaciones para operar elementos, se lo considera un algoritmo de comparación siendo el más sencillo de usar. public void burbuja (int [] a){ for (int i=a.length-1; i>0; i--) for(int j=0; j<i; j++) if (a[ j ] > a[ j+1 ] ){ int temp = a[ j ]; a[ j ]= a[ j+1 ]; a[ j+1 ] = temp; } }
  6. 6. Métodos Directos Método de Inserción Directa Este método consiste en revisar cada elemento del arreglo que vaya a ser ordenado con el siguiente, intercambiándose de posición si están en el orden equivocado. Es necesario en este método revisar varias veces todo el arreglo hasta que no se necesiten más intercambios, lo que significa que el arreglo esta ordenado completamente. Este nombre de burbuja se dice por la forma con la que suben por los elementos de los arreglos durante los intercambios, como si fueran pequeñas &quot;burbujas&quot;. También es conocido como el método del intercambio directo, ya que solo usa comparaciones para operar elementos, se lo considera un algoritmo de comparación siendo el más sencillo de usar.
  7. 7. public void selecciondirecta(int n) {   int i,j,min,k;   int cambio;   for(i=0;i<n;i++)    {      min=arr[i];      k=0;      cambio=0;      for(j=i+1;j<n;j++)         {           if (arr[ j ]<min)             {               min=arr[ j ];               k=j;              cambio=1;}             }           if (cambio )             {               arr[ k ]=arr[ i ];               arr[ i ]=min;             }        } }
  8. 8. Métodos Directos Método de Selección Directa Este método consiste en recorrer un arreglo desde la primera posición hasta n-1, en cada ves que se recorre se busca encontrar el elemento más pequeño, de tal forma que después de la primera ves en la posición 0 este el elemento más pequeño de todo el arreglo; en la segunda ves el segundo elemento más pequeño y así sucesivamente hasta ordenar todos los elementos. Este método no es el más eficiente, pero es uno de lo más fáciles de implementar.
  9. 9. int i,j,aux; Se da valores a los elementos del arreglo for(i=1;i { // Se intenta añadir el elemento i. aux=array[i]; for(j=i-1;j>=0;j--) // Se recorre la sublista de atrás a adelante para buscar { // la nueva posición del elemento i. if(aux>array[j]) // Si se encuentra la posición: { array[j+1]=aux; // Colocarlo break; // y colocar el siguiente número. } else // si no, sigue buscándola. array[j+1]=array[j]; } if(j==-1) // si se ha buscado en todas las posiciones y no se ha encontrado la correcta array[0]=aux; // es que la posición es al principio del todo. }
  10. 10. Métodos Avanzados Método de Selección Directa / QuickSort <ul><li>Este método consiste en resolver un problema a partir de la solución de subproblemas del mismo tipo, pero de menor tamaño. Si los subproblemas son todavía relativamente grandes se aplicará de nuevo esta técnica hasta alcanzar subproblemas lo suficientemente pequeños para ser solucionados directamente. </li></ul><ul><li>Se plantea el problema de forma que pueda ser descompuesto en k subproblemas del mismo tipo, pero de menor tamaño. Es decir, si el tamaño de la entrada es n, hemos de conseguir dividir el problema en k subproblemas, cada uno con una entrada de tamaño nk y donde 0 ≤ nk < n. A esta tarea se le conoce como división. </li></ul><ul><li>Se resuelven independientemente todos los subproblemas. El tamaño de los subproblemas debe ser menor que el tamaño original del problema. </li></ul><ul><li>Finalmente se deben combinar las soluciones obtenidas anteriormente para construir la solución del problema original. </li></ul>
  11. 11. public void quicksort ( int [] a, int izq, int der) { int i = izq; int j =der; int pivote = a[ (izq + der) / 2]; do{ while (a[ i ] < pivote) { i++ } while ( a[ j ]> pivote) { j— } if (i <= j) { int aux = a[ i ]; a[ i ] = a[ j ]; a[ j ] = aux; i++; j--; } } while (i <= j); if (izq < j) { quicksort(a, izq, j); } if (i < der) { quicksort(a, i, der); } }

×