0% encontró este documento útil (0 votos)
94 vistas12 páginas

Resumen 02: Análisis y Diseño de Algoritmos

El documento describe los conceptos de algoritmo, tipos de datos, tipos de datos abstractos y especificación de tipos de datos abstractos. Un algoritmo consta de datos e instrucciones para resolver un problema. Los tipos de datos incluyen datos simples y estructurados. Los tipos de datos abstractos definen las características y operaciones de los datos estructurados de manera independiente del lenguaje de programación. La especificación de un tipo de datos abstracto puede ser informal o formal y describe los datos, operaciones, precondiciones y postcondiciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
94 vistas12 páginas

Resumen 02: Análisis y Diseño de Algoritmos

El documento describe los conceptos de algoritmo, tipos de datos, tipos de datos abstractos y especificación de tipos de datos abstractos. Un algoritmo consta de datos e instrucciones para resolver un problema. Los tipos de datos incluyen datos simples y estructurados. Los tipos de datos abstractos definen las características y operaciones de los datos estructurados de manera independiente del lenguaje de programación. La especificación de un tipo de datos abstracto puede ser informal o formal y describe los datos, operaciones, precondiciones y postcondiciones.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 12

UNA Puno

Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

Resumen 02: ANÁLISIS Y DISEÑO DE ALGORITMOS


Texto: ​Estructura de Datos - Latim (Cap 02)

- Un ​algoritmo se diseña para solucionar un problema, y tiene dos componentes principales: la


identificación de los datos que intervienen en la solución con su respectiva especificación de
diseño y ​la especificación de las instrucciones​ a ejecutar para resolver el problema.
- Los datos son los valores usados en la resolución del problema (entrada, proceso, salida).
Entonces como los datos son información se requiere de varios tipos de datos para manejarlos.
- Un ​algoritmo es un procedimiento computacional, una secuencia finita de instrucciones con un
significado concreto y cuya ejecución genera un tiempo finito. Entonces un algoritmo debe
terminar en un tiempo finito, y cumple con las siguientes condiciones:
- Ser Finito, el algoritmo se ejecuta en tiempo finito.
- Ser Preciso, cada instrucción es precisa, por lo que tiene un significado concreto.
- Ser Eficaz, el algoritmo resuelve el problema.
- Ser Eficiente, el algoritmo resuelve el problema de la mejor manero y con los mínimos
recursos posibles.
- Posee entradas, conjunto de valores específicos que inicializan el algoritmo.
- Posee salida, es la transformación de la entrada por el algoritmo.

Tipos de Datos

- En un lenguaje de programación, el ​tipo de dato ​de una variable está definido por el conjunto
de valores que una variable puede tomar y por el conjunto de operaciones que se pueden
realizar con y sobre dicha variable.
- La solución de un problema que es procesado por un computador usualmente usa ​datos
simples ​y​ datos estructurados​.
- Ejemplos de datos estructurados:
a. Cuando ​definimos un arreglo​ de 10 enteros, el ​arreglo sería un dato estructurado​.
b. La ​definición del tipo de dato estructurado ​Fecha​, el cual estaría compuesto por un
entero para definir el día, otro para el mes y finalmente uno más para definir el año de la
fecha.
- TDA (Tipo de Dato Abstracto) representa un ​concepto que define las características (datos) y
operaciones (algoritmos) de los datos estructurados.
- La implementación de un TDA en un lenguaje de programación usará un tipo de dato
estructurado para definir los datos que lo conforman. Por ejemplo, para crear un modelo
matemático de las fechas, tendríamos que:
a. Definir las características o datos que conforman una Fecha: un mes, un día y un año,
todos números enteros.
b. Definir las operaciones que se pueden realizar con las Fechas: dos fechas se pueden
restar, dando como resultado el número de días entre ellas, a una fecha se le puede
sumar un número de días, dando como resultado otra fecha, etc.

1
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

- En programación, ​estructura de datos representa la ​concretización del TDA que será


implementada. Por ejemplo,
a. El ​TDA Lista ​conceptualmente se refiere a un conjunto de datos que, en teoría, puede
crecer indefinidamente, al cual se le pueden agregar y eliminar elementos sin mayores
restricciones.
b. El ​TDA Lista en concreto puede ser implementado por diferentes estructuras de datos,
como por ejemplo, por una lista enlazada o por un arreglo.

Tipos de Datos Abstractos

- El diseñador de una solución puede imaginar variables como un TDA. Estas variables, son
entidades abstractas llamadas ​objetos​. ​Crear variables de un TDA se conoce como ​instanciar
un TDA​. Cada objeto de un TDA sería una instancia del mismo, con su propia identidad única.
Ejemplo:
- Se puede crear dos instancias del TDA Fecha: Fecha a y Fecha b; entonces a y b son
objetos de tipo Fecha.
- Los TDAs son diseñados bajo los principios de ​abstracción, encapsulamiento y modularidad​.
- Por el ​principio de abstracción​, el TDA es diseñado para resaltar su definición y
operaciones, y esconder los detalles de su funcionamiento.
- Por el ​principio de encapsulamiento​, los detalles se encontrarán escondidos,
encapsulados por lo realmente importante para el diseño: la forma en que se interactúa
con el TDA.
- Por el ​principio de modularidad​: la programación modular se descompone un
programa creado en pequeñas abstracciones independientes las unas de las otras, que
se pueden relacionar fácilmente unas con las otras.
- Cuando se ​diseña un TDA es necesario tener una ​representación abstracta del objeto sobre
el cual se va a trabajar, ​sin tener que recurrir a un lenguaje de programación​. Esto nos
permite crear las condiciones ,expresiones ,relaciones y operaciones de los objetos sobre los
que se va trabajar. Por ejemplo, si se va a desarrollar software para la administración de notas
de una escuela, ​los TDAs Curso, Estudiante, Nota, Lista, etc., van a permitir expresar la solución
de cualquier problema planteado, independientemente del lenguaje de programación con el cual
se implementarán​.

Especificación de un TDA

- Se especifica bajo un enfoque formal o informal.


- La ​especificación informal, ​usa el lenguaje natural para ​describir ​todos los datos y
operaciones del TDA, sin conceptos matemáticos complicados, de tal forma que
cualquiera lo puede entender de manera sencilla y puedan explicarlo de manera natural y
de fácil comprensión.

2
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

- La ​especificación formal, ​define ​precondiciones y ​postcondiciones para las


operaciones de los TDAs, estas se ​refieren a los elementos que componen los objetos
abstractos y a los argumentos que recibe.
- Es importante ​elaborar una breve descripción de cada operación que se crea, de
manera que el usuario del TDA pueda darse una rápida idea de las cosas que puede
realizar el TDA, sin necesidad de entrar a un análisis detallado( dirigido en especial a los
programadores).

Tipos​: nombre de los tipos de datos.


Sintaxis​: Forma de las operaciones, proporciona el tipo de dato de entrada como los
tipos de datos de salida de las operaciones creadas.
Semántica​: Significado de las operaciones, dice el comportamiento de las
operaciones creadas en el TDA.

Tipos de Operaciones de los TDAs

- Se clasifican en 3 grupos según su función sobre el objeto abstracto:


a. Constructora​, operación que crear objeto abstractos simples del TDA
b. Modificadora​, operación que altera el estado de un elemento TDA (simulación de
reacción del objeto).
c. Analizadora​, operación que consulta el estado y retorna algún tipo de
información.
- Además se puede agregar las siguientes operaciones:
a. Comparación​, operación analizadora que calcula la noción de igualdad entre dos
objetos TDA.
b. Copia​, operación modificadora que copia un objeto TDA a otro.

3
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

c. Destrucción​, operación modificadora que elimina un objeto TDA, devuelve el


espacio de memoria utilizado por el objeto TDA; cualquier operación sobre el
objeto destruido genera un error.
d. Salida a pantalla, operación analizadora que permite visualizar el estado de un
elemento TDA. Usada para depurar el TDA durante las pruebas.
e. Persistencia​, operación que permite guardar el estado del elemento TDA en un
espacio secundario, así sobrevive a la ejecución del programa que lo utiliza.

Ejemplo de un TAD: ​TDA RACIONAL

- Enfoque Informal​, número racional expresado por un cociente de dos números


enteros, tiene las operaciones: creación, adición, multiplicación, prueba de
igualdad, impresión.
- Enfoque Semi - Informal​, seudo formalización de la definición del TDA (datos y
operaciones) y forma de uso.
- Enfoque Formal​, concretización o implementación en un lenguaje de
programación.
- Ejercicios propuestos:

Clasificación de los Tipos de Datos

- Desde el punto de vista funcional; como interactuar con el ​tipo de dato​ para obtener el
resultado esperado:

4
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

- Desde el punto de vista de estructuras de datos, las estructuras de datos deben implementarse:
- Según donde residen: internos, externos; las ED internas son: estáticas y dinámicas.
- Las ED estáticas, tiene número fijo de elementos como los arreglos; presentan el
problema de alto costo para reorganizar sus elementos, y el tamaño apartado al principio
puede ser poco o demasiado.
- Las ED dinámicas, según el esquema de programación orientado a objetos, por lo tanto
pueden ser reutilizados y su tamaño se puede contraer y expandir sin problemas, y
pueden ser: lineales y no lineales.
- Las ED dinámica lineales tienen elementos que se ubican secuencialmente, pueden ser
lista, pilas y colas.
- Las ED dinámica no lineales tienen elementos que no se ubican secuencialmente,
pueden ser árboles y grafos.

Análisis de Algoritmos

- Los Algoritmos
- Se debe tener idea de la cantidad de recursos (tiempo de procesador, espacio en la
memoria principal) que requerirá el algoritmo.
- El objetivo es ​conocer los factores que influyen en la eficiencia de un algoritmo, así
aprendemos a calcular el tiempo que emplea un algoritmo, a reducir el tiempo de
ejecución de un programa (por ejemplo, de días o años a fracciones de segundo).
- Los factores que influyen en la eficiencia de un algoritmo son externos e internos.

5
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

- Los factores externos está caracterizado por ​donde ​se ejecuta el algoritmo: computador
= hw(procesador, frecuencia de trabajo, memoria, discos) + sw(sistema operativo,
lenguaje de programación, compilador).
- Los factores internos está caracterizado ​por el tamaño de ​entradas que procesa el
algoritmo, que pueden ser interpretados de dos formas:
- Cantidad de ciclos necesarios para procesar la entrada (tiempo de ejecución)
- Nro de elementos de la entrada (cantidad de memoria).
- Un algoritmo es eficiente si ​optimiza el tiempo de ejecución y el espacio de memoria​,
aunque la optimización de uno será la deficiencia del otro.
- Análisis de Algoritmos
- Basado únicamente en el ​tiempo de ejecución​ (factor interno - temporal).
- La cantidad de tiempo que tome un algoritmo depende de la implementación del
algoritmo y la computadora donde se ejecute, esta tarea es pesada.
- Un algoritmo es un conjunto de instrucciones ordenados de manera lógica que resuelven
un problema. Estas instrucciones pueden ser: enunciados simples (sentencias) o
enunciados compuestos (estructuras de control). El tiempo de ejecución dependerá de
cómo esté organizado ese conjunto de instrucciones, pero nunca será constante.
- Se usa la función ​T(n) que representa el número de unidades de tiempo (o tiempo de
ejecución del algoritmo) que usa un algoritmo de cualquier entrada de tamaño n. La
evaluación se hace desde diferentes puntos de vista:
- Peor caso​, para aquellos ejemplares del problema en el que el algoritmo es
menos eficiente​.
- Mejor caso​, para aquellos ejemplares del problema en el que el algoritmo es
más eficiente​.
- Caso medio​, es más realista pero difícil de calcular.
- Función de Complejidad
- La función de complejidad de un algoritmo es el ​número de operaciones ​elementales
que utiliza un algoritmo cualquiera para resolver un problema de ​tamaño n​.
Matemáticamente se define como:
- Para un algoritmo ​A,​ la función de complejidad del algoritmo A ​T(n) se define como el
número máximo de operaciones elementales que utiliza el algoritmo para resolver un
problema de​ tamaño n​.

T(n) = Max {nx: nx es el número de operaciones que utiliza A para resolver una
instancia x de tamaño n}

- Una ​operación elementa​l u operador básico es cualquier operación ​cuyo tiempo de


ejecución es constante​, es decir, el tiempo de ejecución siempre va a ser el mismo.
- Los tipos de operaciones elementales son:
- Lógica​, dentro de una ​condicional.
- Aritmética​, como +, -, *, /
- Asignación​, otorgar un valor a una variable.

6
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

- Invocación de un método​.
- Cálculo de T(n) para sentencias consecutivas, ​las sentencias van una detrás de otra y
pueden ser de dos casos:

Instrucciones consecutivas: Procedimientos:

- Calcular T(n) para ciclos, ​se tiene los siguientes casos:


- Caso A​: los incrementos, decrementos van de uno en uno y son constantes.
- Ciclo While/Mientras: ​#Operaciones = 1 + (n+1)*nc + n*np
- nc es el número de operaciones en la condición.
- np es número de operaciones del ciclo.
- Ciclo For/Para: ​#Operaciones = 1 + (n + 1)*nc + n*(np + 1)
- Número de veces que itera el ciclo ​n = Ls - Li +1
- Ls es el límite superior del ciclo
- Li es el límite inferior del ciclo
- Caso B​: cuando los incrementos, decrementos dependen de i.
- Ciclo While/Mientras: ​#Operaciones = 1 + (n + 1)*nc + Sum ​f(i)
- f(i)​:función de complejidad del proceso
- Ciclo For/Para: ​#Operaciones = 1 + (n + 1)*nc + n +Sum ​f(i)
- Caso C​: ​cuando se desconoce el valor del incremento o decremento del proceso.
- #Operaciones = (nr + 1)*nc + (nr*np), ​donde:
- nr es el número de veces que se repite el proceso, es la fórmula que
cumple las veces que se ejecuta el proceso para todo número n.
- Función Piso, ​aproximar valor entero mayor
- Función Techo, ​aproximar valor entero menor
- Hallar nr, ​se debe analizar la cantidad de veces que itera el bucle para cada valor
de n.
- Orden de Magnitud (Notación O grande)
- El cálculo detallado del tiempo de ejecución de todas las operaciones primitivas lleva
mucho tiempo.
- Es más útil en el análisis de algoritmos, ver la velocidad de crecimiento del tiempo de
ejecución como una función del tamaño de la entrada n, en lugar de realizar cálculos
detallados
- Es más significativo saber que un algoritmo crece, dependiendo de una entrada n
específica O(g(n)).
- La notación ​O grande es una técnica utilizada para el análisis de la complejidad
computacional de un algoritmo, este análisis se centra en el término dominante (El

7
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

término que más aumenta), permitiendo así ignorar constantes y términos de orden
menor. Ejemplo:

- Propiedades del orden de magnitud:

- Recursividad
- Es una técnica de programación en la cual ​un método puede llamarse a sí mismo​, en
la mayoría de casos un algoritmo iterativo es más eficiente que uno recursivo si de
recursos de la computadora se trata, pero un algoritmo recursivo en muchos casos
permite realizar problemas muy complejos de una manera más sencilla.
- Reglas de la recursividad
- R1: Por lo menos debe tener un caso base y una parte recursiva.
- R2: Toda parte recursiva debe tener a un caso base
- R3: El trabajo nunca se debe duplicar resolviendo el mismo ejemplar de un
problema en llamadas recursivas separadas.
- Complejidad de un algoritmo recursivo
- Método del árbol de recursión
- Es el método más simple, y es adecuado para visualizar qué pasa cuando una
recurrencia es desarrollada, está compuesta de los siguientes elementos: nodo,
costo nivel, *costo total.
- Nodo​, costo de un solo subproblema en alguna parte de la invocación
recursiva.
- Costo por nivel​, la suma de los costos de los nodos del nivel.
- *Costo total​, es la suma de todos los costos del árbol.

8
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

- Algoritmos de Búsqueda y Ordenamiento


- Técnicas que proveen algoritmos eficientes para problemas de búsqueda en un conjunto
de datos y el de ordenamiento.
- Cada algoritmo tiene un nivel de eficiencia diferente, y es importante poder determinar,
dadas las características de un problema en sí, y de las entradas que van a ser
procesadas, cual es el algoritmo más óptimo a ser utilizado
- Algoritmos de Búsqueda
- Necesidad​: recopilación de elementos que necesitan estar ordenados de una
determinada manera ​para​ recuperar información lo más antes posible.
- Pero la operación de búsqueda se puede llevar en elementos ordenados (más
eficiente) o desordenados.
- Los métodos de búsqueda pueden ser internos (en RAM) o externos (en DD),
dependiendo del lugar donde están almacenados los datos.
- Cada algoritmo de búsqueda procura localizar en un arreglo un elemento X, una
vez finalizado puede suceder: tuvo éxito(se encontró la posición donde está) y no
tuvo éxito(no hay el elemento), tal vez hay que insertarlo.
- Busqueda secuencial
- O búsqueda lineal, consiste en recorrer y examinar cada uno de los
elementos del arreglo, mediante un bucle voraz de izquierda a derecha,
hasta encontrar el o los elementos buscados, o hasta que se han
evaluado todos los elementos del arreglo.
- La complejidad computacional en el ​mejor caso el elemento buscado es
el primero en examinar, ​peor caso ​el elemento buscado es el último en
examinar, y ​caso medio ​el elemento buscado está en el centro de la
colección.
- Búsqueda binaria
- Los elementos deben estar ordenados, y consiste en reducir en cada paso
el ámbito de búsqueda a la mitad de los elementos, basándose en
comparar el elemento a buscar con el elemento que se encuentra en la
mitad del intervalo y con base en esta comparación:
- Si el elemento buscado es menor que el elemento medio, entonces
sabemos que el elemento está en la mitad inferior de la tabla.
- Si es mayor es porque el elemento está en la mitad superior.
- Si es igual se finaliza con éxito la búsqueda ya que se ha
encontrado el elemento.
- Repetir hasta hallar el elemento o que el sub-arreglo quede vacío.
- La complejidad computacional es en el ​mejor caso O(1), ​peor caso
O(log2(n)) y ​caso medio​ O(log2n).
- Busqueda binaria recursiva
- Después de comparar el elemento de búsqueda con el elemento de la
mitad de la tabla, se invoca recursivamente a realizar la búsqueda en uno

9
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

de los dos posibles intervalos, el inferior o el superior, finalizando en el


momento en el que se encuentre el elemento o ya se tenga un único
elemento y no coincida con el buscado.
- La complejidad computacional de la búsqueda recursiva es más lenta a
medida que se incrementa el número de elementos, ya que existirán más
llamadas a la función por resolver, con el consiguiente gasto de tiempo de
guardar y restaurar parámetros.
- Busqueda hash
- La búsqueda binaria exige que los datos estén ordenados y siempre
depende del número n de elementos que conforman el conjunto de datos.
- Se usa la técnica hashing para gastar O(1) en buscar cualquier elemento
en una lista.
- Este método se conoce como transformación de claves (clave-dirección) y
consiste en convertir el elemento almacenado (numérico o alfanumérico)
en una dirección (índice) dentro de un arreglo, así se puede acceder al
elemento directamente, pero no sería posible crear un arreglo tan grande
para contener tal cantidad de elementos.
- La función hash determinará el método de acceso al arreglo a partir del
campo clave, pero ocurrirán ​colisiones​; se puede tratar de minimizar
usando:
- Método 1: Hashing y búsqueda, ​consiste en almacenar cada
elemento colisionado en el siguiente espacio disponible.
- Método 2: Rehashing​, si el primer cálculo de la función hash
produce una colisión, se usa la dirección transformada como
entrada para una función rehash y se calcula una nueva dirección.
- Método 3: Múltiples espacios, ​consiste en modificar la tabla de
tal forma que en lugar de almacenar un objeto en cada posición, se
pueda almacenar en cada espacio varios objetos.
- Zona de desbordamiento, ​se trata de mantener una zona
reservada para aquellos elementos que llegan a colisionar, de
manera que cuando se produzca una colisión el elemento se va a
localizar en esta zona de desbordamiento.
- Algoritmos de Ordenamiento
- Son los que ponen elementos de una lista o un vector en una secuencia dada por
una relación de orden​; el resultado de salida es una permutación —o
reordenamiento— de la entrada que satisfaga la relación de orden dada
(numérico o lexicográfico).
- Ordenamiento por selección
- Se divide el arreglo que se está ordenando en dos partes: una, con un
grupo de elementos ya ordenados, que ya encontraron su posición final.
La otra, con los elementos que no han sido todavía ordenados. En cada

10
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

iteración, localizamos el menor elemento de la parte no ordenada, lo


intercambiamos con el primer elemento de esta misma región e indicamos
que la parte ordenada ha aumentada en un elemento.
- La complejidad, #Comparaciones es O(n^2), #intercambios O(n)
- Ordenamiento Burbuja
- Ordenamiento por intercambio, se intercambia todo par de elementos
consecutivos que no se encuentran en orden. Al final de cada pasada
haciendo este intercambio, un nuevo elemento queda ordenado y todos
los demás elementos se acercaron a su posición final. Se llama burbuja
porque al final de cada iteración el mayor va surgiendo al final.
- La complejidad, #Comparaciones es O(n^2)
- Ordenamiento por inserción
- Separa la secuencia en dos grupos: una parte con los valores ordenados
(inicialmente con un solo elemento) y otra con los valores por ordenar
(inicialmente todo el resto).
- Luego se va pasando uno a uno los valores a la parte ordenada,
asegurándose que se vayan colocando ascendentemente.
- La complejidad es O(n^2)
- Ordenamiento Shell
- Realiza comparaciones entre elementos NO consecutivos, separados por
una distancia salto. El valor salto al principio es n/2 y va decreciendo en
cada iteración hasta llegar a valer 1. Cuando salto vale 1 se comparan
elementos consecutivos. El valor se encontrará ordenado cuando salto
valga 1 y no se puedan intercambiar elementos consecutivos porque
están en orden.
- La complejidad es O(n log 2 n)
- Merge Sort
- Divide el vector por la posición central, ordena cada una de las mitades y
después realiza la mezcla ordenada de las dos mitades. El caso base es
aquel que recibe un vector con ningún elemento, o con 1 solo elemento,
ya que está ordenado.
- La complejidad es O(n*log n)
- Quick Sort
- Divide el array en dos subarrays, que se pueden ordenar de modo
independiente. Se selecciona un elemento específico del array
arreglo[centro] llamado pivote. Luego, se debe re situar los demás
elementos de la lista a cada lado del pivote, de manera que a un lado
queden todos los menores que él, y al otro los mayores. Los elementos
iguales al pivote pueden ser colocados tanto a su derecha como a su
izquierda, dependiendo de la implementación deseada. En este momento,
el pivote ocupa exactamente el lugar que le corresponderá en la lista

11
UNA Puno
Ingeniería de Sistemas
SIS206-Algoritmos y Estructuras de Datos Grupo C [2019-II] ​Ing. Mayenka Fernández Chambi

ordenada. Finalmente, se divide el array original en dos subarrays que se


ordenarán de modo independiente mediante llamadas recursivas del
algoritmo
- La complejidad es en el ​mejor caso (​ log n), ​peor caso ​n2.

12

También podría gustarte