Ordenaci - PowerPoint PPT Presentation

About This Presentation
Title:

Ordenaci

Description:

Title: Estructuras de datos y Algoritmos usando Programaci n Orientada a Objetos Author: PEDRO CORCUERA Last modified by: Pedro Corcuera Created Date – PowerPoint PPT presentation

Number of Views:51
Avg rating:3.0/5.0
Slides: 62
Provided by: PEDRO200
Category:

less

Transcript and Presenter's Notes

Title: Ordenaci


1
Ordenación, Clasificación
  • Introducción
  • Algoritmos
  • Complejidad

2
Introducción
  • Ordenación o clasificación es el proceso de
    reordenar un conjunto de objetos en un orden
    específico. El propósito de la ordenación es
    facilitar la búsqueda de elementos en el conjunto
    ordenado.
  • Existen muchos algoritmos de ordenación, siendo
    la diferencia entre ellos las ventajas de unos
    sobre otros en la eficiencia en tiempo de
    ejecución.

3
Introducción
  • Los métodos de ordenación se pueden clasificar en
    dos categorías
  • ordenación de ficheros y
  • ordenación de arrays.
  • También suele llamarse ordenamiento externo e
    interno, debido a que los ficheros se guardan en
    la memoria externa (lenta) mientras que los
    arrays se almacenan en la memoria rápida del
    ordenador (interna). En esta sección sólo se
    aborda el ordenamiento interno.

4
Introducción
  • El problema del ordenamiento puede establecerse
    mediante la siguiente ación
  • Dados los elementos
  • Ordenar consiste en permutar esos elementos en
    un orden
  • tal que dada una función de ordenamiento f

5
Introducción
  • Normalmente, la función de ordenamiento no es
    evaluada de acuerdo a una regla de computación
    determinada, pero se guarda como un componente
    explícito (campo) de cada item (elemento). El
    valor de ese campo se llama la llave del item.
  • Un método de ordenamiento es estable si el orden
    relativo de elementos con igual llave permanece
    inalterado por el proceso de ordenamiento.
  • Se entiende que los métodos de ordenamiento
    buscan un uso eficiente de la memoria por lo que
    las permutaciones de elementos se hará in situ,
    es decir, usando el mismo contenedor original.

6
Introducción
  • En lo que sigue se considera que la estructura
    lineal (array, lista, vector o secuencia) a
    ordenar se representa por un array de objetos
    (números enteros)
  • int a new intMAX
  • siendo MAX el número máximo de elementos del
    array. El orden de los elementos después de la
    ordenación se considera ascendente.

7
Algoritmo burbuja
  • Es un método caracterizado por la comparación e
    intercambio de pares de elementos hasta que todos
    los elementos estén ordenados.
  • En cada iteración se coloca el elemento más
    pequeño (orden ascendente) en su lugar correcto,
    cambiándose además la posición de los demás
    elementos del array.

8
Algoritmo burbuja
9
Algoritmo burbuja
10
Algoritmo burbuja
11
Algoritmo burbuja
12
Algoritmo burbuja
13
Algoritmo burbuja
  • for(inigt0i--)
  • for(j0jlti-1j)
  • if (aj gt aj1)
  • taj
  • aj aj1
  • aj1t
  • ninterc

14
Algoritmo sacudida (shakesort)
  • Es una mejora del algoritmo de burbuja en el que
    se registra la ocurrencia de un intercambio y el
    índice del último intercambio y se alterna la
    dirección de las pasadas consecutivas. Con ello
    una burbuja liviana en el lado pesado y una
    pesada en el lado liviano quedarán en orden en
    una pasada simple.

15
Algoritmo sacudida (shakesort)
lk1 for(jl jltr j) if
(aj-1gtaj) taj-1 aj-1
aj ajt kj ninterc
rk-1 while (lltr)
  • l1 rn-1 kn-1
  • do
  • for(jr jgtl j--)
  • if (aj-1gtaj)
  • taj-1
  • aj-1 aj
  • ajt
  • kj
  • ninterc

16
Algoritmo inserción
  • Este método es usado por los jugadores de cartas.
    Los elementos están divididos conceptualmente en
    una secuencia destino y una secuencia fuente .
    En cada paso, comenzando con i2 e incrementando
    i en uno, el elemento i-ésimo de la secuencia
    fuente se toma y se transfiere a la secuencia
    destino insertándolo en el lugar adecuado.
  • En otras palabras, en el i-ésimo paso insertamos
    el i-ésimo elemento ai en su lugar correcto
    entre a1, a2,., ai-1, que fueron colocados
    en orden previamente.

17
Algoritmo inserción
18
Algoritmo inserción
19
Algoritmo inserción
20
Algoritmo inserción
21
Algoritmo inserción
22
Algoritmo inserción
23
Algoritmo inserción
24
Algoritmo inserción
25
Algoritmo inserción
  • for(i1iltni)
  • ji-1
  • tai
  • while (jgt0 tltaj)
  • aj1 aj
  • jj-1
  • aj1t

26
Algoritmo selección
  • En éste método, en el i-ésimo paso seleccionamos
    el elemento con la llave de menor valor, entre
    ai,, an y lo intercambiamos con ai. Como
    resultado, después de i pasadas, el i-ésimo
    elemento menor ocupará a1,, ai en el lugar
    ordenado.

27
Algoritmo selección
28
Algoritmo selección
29
Algoritmo selección
30
Algoritmo selección
31
Algoritmo selección
32
Algoritmo selección
33
Algoritmo selección
34
Algoritmo selección
35
Algoritmo selección
  • for(i0iltn-1i)
  • ki
  • tai
  • for (ji1 jltn j)
  • if (aj lt t)
  • t aj
  • kj
  • ak ai
  • ai t

36
Algoritmo rápido (Quicksort)
  • La ordenación rápida se basa en el hecho que los
    intercambios deben ser realizados preferentemente
    sobre distancias grandes.
  • El algoritmo a seguir es el mismo que se aplica
    cuando se quiere ordenar un gran montón de
    exámenes
  • Seleccionar un valor de división (L por ejemplo)
    y dividir el montón en dos pilas, A-L y M-Z.
    Después se toma la primera pila y se subdivide en
    dos, A-F y G-L por ejemplo. A su vez la pila A-F
    puede subdividirse en A-C y D-F. Este proceso
    continúa hasta que las pilas sean suficientemente
    pequeñas para ordenarlas fácilmente. El mismo
    proceso se aplica a la otra pila.

37
Algoritmo rápido (Quicksort)
  • En este caso se toma un elemento x del array (el
    del medio por ejemplo), se busca en el array
    desde la izquierda hasta que gtx, lo mismo se hace
    desde la derecha hasta encontrar ltx.
  • Después se intercambia esos elementos y se
    continúa ese proceso hasta que los índices se
    encuentren en la mitad del array. Se aplica el
    mismo proceso para la porción izquierda del array
    entre el extremo izquierdo y el índice derecho y
    para la porción derecha entre el extremo derecho
    y el último índice izquierdo.

38
Algoritmo rápido (Quicksort)
  • Descripción del algoritmo
  • 1) Dividir Si la secuencia S tiene 2 o más
    elementos, seleccionar un elemento x de S como
    pivote. Cualquier elemento arbitrario, como el
    último, puede servir. Elimiar los elementos de S
    dividiéndolos en 3 secuencias
  • L, contiene los elementos de S menores que x
  • E, contiene los elementos de S iguales a x
  • G, contiene los elementos de S mayores que x
  • 2) Recursión De forma recursiva ordenar L y G
  • 3) Vencer Finalmente, colocar nuevamente los
    elementos en S en orden, primero insertar los
    elementos de L, después E, y los elementos de G.

39
Idea de Quick Sort
  • 1) Selección tomar un elemento
  • 2) Dividir reordenar los elementos tal que x va
    a su posición final E
  • 3) Recursión y Vencer ordenar recursivamente

40
Arbol Quicksort
41
Arbol Quicksort
42
Arbol Quicksort
43
Arbol Quicksort
44
Arbol Quicksort
45
Arbol Quicksort
46
Arbol Quicksort
47
Arbol Quicksort
48
Arbol Quicksort
49
Arbol Quicksort
50
Arbol Quicksort
51
Arbol Quicksort
52
... Arbol Quicksort (final)
53
Quicksort In-Place
Paso Dividir l recorre la secuencia desde la
izquierda, y r desde la derecha
Se realiza un intercambio cuando l está en un
elemento mayor que el pivote y r está en uno
menor al pivote.
54
In Place Quick Sort (contd.)
Un intercambio con el pivote completa el paso
dividir cuando r lt l
55
Algoritmo rápido (Quicksort)
for (iizq1iltderi) if (ai lt aizq)
tmp ault ault ai
aitmp tmp aizq aizq ault
aulttmp qsort(izq,ult-1,a)
qsort(ult1,der,a)
  • void qsort(int izq, int der, int a)
  • int i, ult, m, tmp
  • if (izq gt der)
  • return
  • tmp aizq
  • m (izqder)/2
  • aizq am
  • amtmp
  • ultizq

56
Ordenación directa por base (radix sort)
  • A diferencia de otros métodos, radix sort
    considera la estructura de las llaves.
  • Se asume que las llaves están representadas en un
    sistema de numeración M (Mradix), e.g., si M2,
    las llaves están representadas en binario.
  • Toma ventaja de la posición de cada dígito
    individual en la clave. Hay dos versiones de la
    ordenación radix MSD (most significant digit),
    LSD (least significant digit).
  • La ordenación se realiza comparando los bits en
    cada posición.

57
Ejemplo Radix sort
  • Conjunto a ordenar 33, 60, 5, 15, 25, 12, 45,
    70, 35, 7
  • frente
    cola
  • cola_digitos0 60
    70
  • cola_digitos1
  • cola_digitos2 12
  • cola_digitos3 33
  • cola_digitos4
  • cola_digitos5 5 15 25 45
    35
  • cola_digitos6
  • cola_digitos7 7
  • cola_digitos8
  • cola_digitos9

58
Ejemplo Radix sort
  • Conjunto a ordenar 33, 60, 5, 15, 25, 12, 45,
    70, 35, 7
  • frente
    cola
  • cola_digitos0 05
    07
  • cola_digitos1 12
  • cola_digitos2 25
  • cola_digitos3 33 35
  • cola_digitos4
  • cola_digitos5 45
  • cola_digitos6 60
  • cola_digitos7 70
  • cola_digitos8
  • cola_digitos9

59
Radix sort directo
  • Se examinan los bits de derecha a izquierda
  • for k0 to b-1
  • ordenar el array de forma estable
  • tomando solo el bit k

60
Radix sort en enteros
  • La ordenación resultante es estable

61
Análisis de Tiempo de Ejecución
  • Los algoritmos de burbuja, inserción, selección
    corren en O(n2).
  • El algoritmo quicksort, montones corren en
    O(nlogn)
  • El algoritmo radix sort es O(n)
Write a Comment
User Comments (0)
About PowerShow.com