Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Algoritmos de Ordenación: Implementación y Casos de Estudio, Apuntes de Algoritmos y Programación

Este documento contiene una implementación de varios algoritmos de ordenación, como bubble sort, selection sort y binary search, además de un análisis de cómo funcionan y cuál es el mejor caso de uso de cada uno. Se incluyen ejemplos de listas no ordenadas, ordenadas y aleatorias, y se analiza cuál trabaja mejor en cada caso.

Tipo: Apuntes

2019/2020

Subido el 13/12/2020

englinx
englinx 🇨🇴

2 documentos

1 / 47

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
7
GradoenIngenieríaInformática
GradoenIngenieríadelSoftware
GradoenIngenieríadeComputadores
LuisHernándezYáñez
FacultaddeInformática
UniversidadComplutense
Fundamentosdelaprogramación
LuisHernándezYáñez
Fundamentosdelaprogramación:Algoritmosdeordenación
Algoritmosdeordenación 651
Algoritmodeordenaciónporinserción 654
Ordenacióndearraysporinserción 665
Algoritmodeordenaciónporinserción
conintercambios 672
Clavesdeordenación 680
Estabilidaddelaordenación 688
Complejidadyeficiencia 692
Ordenacionesnaturales 694
Ordenaciónporseleccióndirecta 701
Métododelaburbuja 716
Listasordenadas 722
Búsquedasenlistasordenadas 729
Búsquedabinaria 731
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c
pf2d
pf2e
pf2f

Vista previa parcial del texto

¡Descarga Algoritmos de Ordenación: Implementación y Casos de Estudio y más Apuntes en PDF de Algoritmos y Programación solo en Docsity!

Grado en Ingeniería Informática

Grado en Ingeniería del Software

Grado en Ingeniería de Computadores

Luis Hernández Yáñez

Facultad de Informática Universidad Complutense Fundamentos de la programación Luis Hernández Yáñez Fundamentos de la programación: Algoritmos de ordenación

Algoritmos de ordenación 651

Algoritmo de ordenación por inserción 654

Ordenación de arrays por inserción 665

Algoritmo de ordenación por inserción

con intercambios 672

Claves de ordenación 680

Estabilidad de la ordenación 688

Complejidad y eficiencia 692

Ordenaciones naturales 694

Ordenación por selección directa 701

Método de la burbuja 716

Listas ordenadas 722

Búsquedas en listas ordenadas 729

Búsqueda binaria 731

Luis Hernández Yáñez Fundamentos de la programación: Algoritmos de ordenación Página 651 Luis Hernández Yáñez Ordenación de listas Mostrar los datos en orden, facilitar las búsquedas, ... Variadas formas de hacerlo (algoritmos)

array

array

Algoritmo de ordenación

(de menor a mayor)

Algoritmo de ordenación

(de menor a mayor)

array[i]array[i] <=<= array[iarray[i ++ 1]1]

Luis Hernández Yáñez 6 1 3 8 2 9 Algoritmo de ordenación por inserción Partimos de una lista vacía Vamos insertando cada elemento en el lugar que le corresponda Baraja de nueve cartas numeradas del 1 al 9 Las cartas están desordenadas Ordenaremos de menor a mayor (ascendente) Fundamentos de la programación: Algoritmos de ordenación Página 655 4 7 5 Luis Hernández Yáñez Algoritmo de ordenación por inserción 6 1 3 8 2 9 4 7 5

Lista ordenada:Lista ordenada:

5 Colocamos el primer elemento en la lista vacíaColocamos el primer elemento en la lista vacía

Luis Hernández Yáñez Algoritmo de ordenación por inserción Fundamentos de la programación: Algoritmos de ordenación Página 657 6 1 3 8 2 9 4 7 5 7 El 7 es mayor que todos los elementos de la lista Lo insertamos al final

Lista ordenada:Lista ordenada:

Luis Hernández Yáñez Algoritmo de ordenación por inserción Primer elemento (5) mayor que el nuevo (4): Desplazamos todos una posición a la derecha Insertamos el nuevo en la primera posición 6 1 3 8 2 9 4 54 75 7

HemosHemos insertadoinsertado elel elementoelemento enen susu lugarlugar

Lista ordenada:Lista ordenada:

Luis Hernández Yáñez Algoritmo de ordenación por inserción Fundamentos de la programación: Algoritmos de ordenación Página 661 6 1 3 8 42 4 5 7 98 9 El 9 es el primer elemento mayor que el nuevo (8): Desplazamos desde ese hacia la derecha Insertamos donde estaba el 9

Lista ordenada:Lista ordenada:

Luis Hernández Yáñez 8 Algoritmo de ordenación por inserción 6 1 3 42 43 54 75 7 98 9

Lista ordenada:Lista ordenada:

Segundo elemento (4) mayor que el nuevo (3): Desplazamos desde ese hacia la derecha Insertamos donde estaba el 4

Luis Hernández Yáñez 2 3 Algoritmo de ordenación por inserción Fundamentos de la programación: Algoritmos de ordenación Página 663 6 1 1 2 43 54 75 87 98 9

Lista ordenada:Lista ordenada:

Primer elemento (2) mayor que el nuevo (1): Desplazamos todos una posición a la derecha Insertamos el nuevo en la primera posición Luis Hernández Yáñez Algoritmo de ordenación por inserción 6 1 2 3 4 5 76 87 98 9 ¡¡¡ LISTA ORDENADA !!!¡¡¡ LISTA ORDENADA !!!

Lista ordenada:Lista ordenada:

El 7 es el primer elemento mayor que el nuevo (6): Desplazamos desde ese hacia la derecha Insertamos donde estaba el 7

Luis Hernández Yáñez Ordenación de arrays por inserción

... Desplazar a la derecha los ordenados desde ese lugar Insertar el nuevo en la posición que queda libre Fundamentos de la programación: Algoritmos de ordenación Página 667

nuevonuevo^7

nuevonuevo 7

Luis Hernández Yáñez Implementación

int nuevo, pos;

// Desde el segundo elemento hasta el último...

for (int i = 1; i < N; i++) {

nuevo = lista[i];

pos = 0;

while ((pos < i) && !(lista[pos] > nuevo)) {

pos++;

// pos: índice del primer mayor; i si no lo hay

for (int j = i; j > pos; j‐‐) {

lista[j] = lista[j ‐ 1];

lista[pos] = nuevo;

const int N = 15;

typedef int tLista[N];

tLista lista;

Luis Hernández Yáñez Fundamentos de la programación: Algoritmos de ordenación Página 669

ii 1 pospos 0 nuevonuevo 7

 Luis Hernández Yáñez



ii^4 pospos^0 nuevonuevo^5

Luis Hernández Yáñez La inserción de cada elemento se puede realizar con comparaciones e intercambios Desde el segundo elemento hasta el último: Desde la posición del nuevo elemento a insertar: Mientras el anterior sea mayor, intercambiar Fundamentos de la programación: Algoritmos de ordenación Página 673

 Luis Hernández Yáñez



Luis Hernández Yáñez

int tmp, pos;

// Desde el segundo elemento hasta el último...

for (int i = 1; i < N; i++) {

pos = i;

// Mientras no al principio y anterior mayor...

while ((pos > 0) && (lista[pos ‐ 1] > lista[pos])) {

// Intercambiar...

tmp = lista[pos];

lista[pos] = lista[pos ‐ 1];

lista[pos ‐ 1] = tmp;

pos‐‐; // Posición anterior

Fundamentos de la programación: Algoritmos de ordenación Página 675

const int N = 15;

typedef int tLista[N];

tLista lista;

Luis Hernández Yáñez

#include

using namespace std;

#include

const int N = 100;

typedef int tArray[N];

typedef struct { // Lista de longitud variable

tArray elementos;

int contador;

} tLista;

int main() {

tLista lista;

ifstream archivo;

int dato, pos, tmp;

lista.contador = 0;

insercion.cppinsercion.cpp

Luis Hernández Yáñez Consideración de implementación ¿Operador relacional adecuado? lista[pos ‐ 1] ¿ > o >=? lista[pos] Con >= se realizan intercambios inútiles: Fundamentos de la programación: Algoritmos de ordenación Página 679

¡Intercambio inútil!¡Intercambio inútil!

Luis Hernández Yáñez

Luis Hernández Yáñez Claves de ordenación Elementos que son estructuras con varios campos:

const int N = 15;

typedef struct {

int codigo;

string nombre;

double sueldo;

} tDato;

typedef tDato tLista[N];

tLista lista;

Clave de ordenación: Campo en el que se basan las comparaciones Fundamentos de la programación: Algoritmos de ordenación Página 681 Luis Hernández Yáñez Claves de ordenación

tDato tmp;

while ((pos > 0)

&& (lista[pos ‐ 1].nombre > lista[pos].nombre)) {

tmp = lista[pos];

lista[pos] = lista[pos ‐ 1];

lista[pos ‐ 1] = tmp;

pos‐‐;

Comparación: campo concreto Intercambio: elementos completos

Luis Hernández Yáñez

void mostrar(tLista lista);

bool operator>(tDato opIzq, tDato opDer);

int main() {

tLista lista;

ifstream archivo;

lista.cont = 0;

archivo.open("datos.txt");

if (!archivo.is_open()) {

cout << "Error de apertura del archivo!" << endl;

else {

tDato dato;

archivo >> dato.codigo;

while ((lista.cont < N) && (dato.codigo != ‐1)) {

archivo >> dato.nombre >> dato.sueldo;

lista.datos[lista.cont] = dato;

lista.cont++;

archivo >> dato.codigo;

archivo.close(); ...

Fundamentos de la programación: Algoritmos de ordenación Página 685 Luis Hernández Yáñez

cout << "Antes de ordenar:" << endl;

mostrar(lista);

for (int i = 1; i < lista.cont; i++) {

// Desde el segundo elemento hasta el último

int pos = i;

while ((pos > 0)

&& (lista.datos[pos‐1] > lista.datos[pos])) {

tDato tmp;

tmp = lista.datos[pos];

lista.datos[pos] = lista.datos[pos ‐ 1];

lista.datos[pos ‐ 1] = tmp;

pos‐‐;

cout << "Después de ordenar:" << endl;

mostrar(lista);

return 0;

Luis Hernández Yáñez

void mostrar(tLista lista) {

for (int i = 0; i < lista.cont; i++) {

cout << setw(10)

<< lista.datos[i].codigo

<< setw(20)

<< lista.datos[i].nombre

<< setw(12)

<< fixed

<< setprecision(2)

<< lista.datos[i].sueldo

<< endl;

bool operator>(tDato opIzq, tDato opDer) {

return (opIzq.nombre > opDer.nombre);

Fundamentos de la programación: Algoritmos de ordenación Página 687

Cambia aCambia a codigocodigo oo sueldosueldo para ordenar por otros campospara ordenar por otros campos

Luis Hernández Yáñez