La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

1 Otros algoritmos de ordenación. 2 Método de ordenación por inserción Se divide la tabla en dos subtablas: - la subtabla de la izquierda está ordenada.

Presentaciones similares


Presentación del tema: "1 Otros algoritmos de ordenación. 2 Método de ordenación por inserción Se divide la tabla en dos subtablas: - la subtabla de la izquierda está ordenada."— Transcripción de la presentación:

1 1 Otros algoritmos de ordenación

2 2 Método de ordenación por inserción Se divide la tabla en dos subtablas: - la subtabla de la izquierda está ordenada e inicialmente contiene un solo elemento; - la subtabla de la derecha está desordenada. En cada iteración se escoge el primer elemento de la subtabla derecha y se coloca en la posición que le corresponde en la subtabla izquierda. Para ello se desplazan una po- sición adelante todos los elementos de la subtabla izquierda que son mayores que di- cho elemento y finalmente se inserta en su posición. [4, 3, 7, 5, 1] elemento = 3 [4,, 7, 5, 1], [, 4, 7, 5, 1], [3, 4, 7, 5, 1] [3, 4, 7, 5, 1] elemento = 7 [3, 4,, 5, 1], [3, 4, 7, 5, 1] [3, 4, 7, 5, 1] elemento = 5 [3, 4, 7,, 1], [3, 4,, 7, 1], [3, 4, 5, 7, 1] [3, 4, 5, 7, 1] elemento = 1 [3, 4, 5, 7, ], [3, 4, 5,, 7], [3, 4,, 5, 7] [3,, 4, 5, 7], [, 3, 4, 5, 7], [1, 3, 4, 5, 7] [1, 3, 4, 5, 7]

3 3 void ordena_insercion(double v[N]){ int i, j; double el; for (i=1;i<N;i++) { el=v[i]; j=i-1; while (v[j]>el && j>=0) { v[j+1]=v[j]; j--; } v[j+1]=el; }

4 4 Método de ordenación rápida Se extrae el primer elemento de la tabla y se divide ésta en dos subtablas tales que: - los elementos de la subtabla de la izquierda sean menores o iguales que el elemento extraído; - los elementos de la subtabla de la derecha sean mayores o iguales que el elemento extraído. Se ordena cada una de las subtablas utilizando el mismo método, y se construye la tabla ordenada completa colocando el elemento extraído después del último elemento de la subtabla de la izquierda y antes del primer elemento de la subtabla de la derecha. S. Izquierda S. Derecha T. Ordenada [4, 3, 7, 5, 1] elemento = 4 [1, 3], [5, 7], [IO, 4, DO] k = 3 [1, 3] elemento = 1 [], [3] [1, 3] = IO k = 1 [5, 7] elemento = 5 [], [7] [5, 7] = DO k = 3 [1, 3, 4, 5, 7]

5 5 void ordena_rapida(double v[N]){ ordena_rapida(v, 0, N-1); } void ordena_rapida(double v[N], int i, int j){ int k; if (i < j) { divide(v, i, j, k); ordena_rapida(v, i, k-1); ordena_rapida(v, k+1, j); }

6 6 void divide(double v[N], int i, int j, int& k) { double el=v[i]; int k=i, q=j; while (k < q) { if (v[q] < el) { intercambia(v[k+1], v[q]); k++; } else { q--; } intercambia(v[i], v[k]); }

7 7 Ordenación por fusión La ordenación por fusión se basa en la idea de dividir la tabla en dos partes que se ordenan por separado, y a continuación fusionar las dos partes ya ordenadas. Ejemplo [6, 1, 8, 5, 9, 7, 4, 6, 7, 2, 6] Se divide la tabla en dos partes [6, 1, 8, 5, 9] [7, 4, 6, 7, 2, 6] Se ordenan por separado las dos partes [1, 5, 6, 8, 9] [2, 4, 6, 6, 7, 7] Se fusionan las dos partes ordenadas [1, 2, 4, 5, 6, 6, 6, 7, 7, 8, 9]

8 8 void ordena_fusion(double v[N], int p, int u){ int k; if (p<u) { k=(p+u)/2; ordena_fusion(v,p,k); ordena_fusion(v,k+1,u); fusion_local(v,p,k,u); }

9 9 void fusion_local(double v[N], int i, int k, int j) { double x[N]; int p=i, q=k+1, r=i; while (p<=k && q<=j) { if (v[p]>v[q]) { x[r]=v[q]; q++; } else { x[r]=v[p]; p++; } r++; } while (p<=k) {x[r]=v[p]; p++; r++; } while (q<=j) {x[r]=v[q]; q++; r++; } p=i; while (p<=j) {v[p]=x[p]; p++; } }

10 10 Método de ordenación de burbuja Colocamos el menor elemento en primer lugar, recorriendo el vector desde la última posición a la primera e intercambiando los elementos consecutivos desordenados. [8, 3, 4, 1, 5]  [8, 3, 4, 1, 5], [8, 3, 4, 1, 5], [8, 3, 1, 4, 5], [8, 1, 3, 4, 5], [1, 8, 3, 4, 5] Colocamos el segundo menor elemento en segundo lugar, recorriendo el vector desde la última posición hasta la segunda e intercambiando los elementos consecutivos desordenados. [1, 8, 3, 4, 5]  [1, 8, 3, 4, 5], [1, 8, 3, 4, 5], [1, 8, 3, 4, 5], [1, 3, 8, 4, 5] Colocamos el tercer menor elemento [1, 3, 8, 4, 5]  [1, 3, 8, 4, 5], [1, 3, 8, 4, 5], [1, 3, 4, 8, 5]

11 11 Método de ordenación de burbuja Colocamos el cuarto menor elemento [1, 3, 4, 8, 5]  [1, 3, 4, 8, 5], [1, 3, 4, 5, 8] Termina el proceso con el vector ordenado, ya que si hemos colocado correctamente los 4 primeros elementos el quinto debe estar ordenado. [1, 3, 4, 5, 8]

12 12 void ordena_burbuja(double v[N], int n){ int i, j; for (i=0;i<n-1;i++) { for (j=n-1;j>i;j--) { if (v[j]<v[j-1]) intercambia(v[j],v[j-1]); }


Descargar ppt "1 Otros algoritmos de ordenación. 2 Método de ordenación por inserción Se divide la tabla en dos subtablas: - la subtabla de la izquierda está ordenada."

Presentaciones similares


Anuncios Google