Está en la página 1de 10

Algoritmos de Ordenamiento

Algoritmos

Bubble Sort
Selection Sort
Insertion Sort
Quick Sort

1
Algoritmo de la Burbuja (bubblesort)

El algoritmo ms popular y bsico para ordenar un


conjunto de n elementos en un arreglo

Algoritmo de la Burbuja

void bubbleSort(int numbers[], int array_size)


{ int i, j, temp;
for (i = (array_size - 1); i >= 0; i--)
{ for (j = 1; j <= i; j++)
{ if (numbers[j-1] > numbers[j])
{ temp = numbers[j-1];
numbers[j-1] = numbers[j];
numbers[j] = temp;
}
}
}
}

2
Complejidad Algoritmo Burbuja
void bubbleSort(int numbers[], int i j
array_size)
{ int i, j, temp; n-1 n-1
for (i = (array_size - 1); i >= 0; i--)
{ for (j = 1; j <= i; j++)
n-2 n-2
{ if (numbers[j-1] > numbers[j]) n-3 n-3
{ temp = numbers[j-1];
numbers[j-1] = numbers[j];
numbers[j] = temp; 0 0
}
}
} n 1 n
n(n + 1)
} total = k = k n = n
k =1 k =1 2

Algoritmo de la Burbuja

Claramente, el algoritmo esta en O(n2)

Este algoritmo se puede optimizar para el


mejor caso, en cuyo caso puede comportarse
como un algoritmo lineal Cmo se
modificara el cdigo?

3
Algoritmo de Seleccin

Algoritmo en el cual, por cada ciclo de


ejecucin se busca colocar en la posicin i
el menor valor entre los valores que se
encuentran desde la posicin i hasta la
posicin n
Por cada pasada, se identifica el menor valor en la parte
del arreglo que no se ha procesado
En cada pasada, la dimensin del arreglo a procesar
disminuye en 1

Ejemplo Algoritmo de Seleccin


8 6 1 4 9 2 5 3 0 7

0 6 1 4 9 2 5 3 8 7
01 6 4 9 2 5 3 8 7
0 1 2 4 9 6 5 3 8 7
0 1 2 3 9 6 5 4 8 7
0 12 3 4 6 5 9 8 7
0 1 2 3 4 5 6 9 8 7
0 1 2 3 4 5 6 9 8 7
0 1 2 3 4 5 6 7 8 9

4
Algoritmo Seleccin

Cul es el peor caso para el algoritmo de


seleccin?
Cul es su mejor caso?

Al igual que el mtodo de la burbuja, este


algoritmo se encuentra en O(n2)

Complejidad Algoritmo Seleccin


void Seleccion(int A[],int N) Se considera el bucle ms interno (if
{ (A[j]<menor))
int i,menor,k,j; Tiempo de ejecucin: c
for(i=0;i<=N-2;i++) Por cada pasada de i, el bucle
interno se ejecuta: n-(i+1)+1 = n i
{ menor=A[i];
El tiempo del bucle interno es: t(i)
k=i; <= (n-i)c
for(j=i+1;j<=N-1;j++) Por cada pasada de i, el bucle
{ if(A[j]<menor) externo se tarda: b + t(i), donde b es
{ menor=A[j]; el nmero de operaciones
k=j; realizadas en el bucle
} Por lo anterior, el tiempo total es
menor o igual a:
} n 1 n 1 n 1
A[k]=A[i];
A[i]=menor;
b + (n i)c = (b + cn) c i =
i =1 i =1 i =1
} 1 1
} (n 1)(b + cn) cn(n 1) = cn 2 + b c n b
2 2 2

5
Complejidad Algoritmo Seleccin

Si se utiliza un barmetro (instruccin ms interna),


la expresin se simplifica a:

n 1 n n 1 n 1
n(n 1)
1 = (n i ) = k =
i =1 j =i +1 i =1 k =1 2

Algoritmo Insercin

En este algoritmo, el arreglo se va ordenando


de izquierda a derecha
Se ubica el orden correcto de un valor,
recorriendo los valores ms grandes una
posicin a la derecha y colocando el valor
ordenado en su posicin correcta

6
Algoritmo de Insercin
8 6 1 4 9 2 5 3 0 7

6 8 1 4 9 2 5 3 0 7
16 8 4 9 2 5 3 0 7
1 4 6 8 9 2 5 3 0 7
1 4 6 8 9 2 5 3 0 7
1 24 6 8 9 5 3 0 7
1 2 4 5 6 8 9 3 0 7
1 2 3 4 5 6 8 9 0 7
0 1 2 3 4 5 6 8 9 7

Anlisis Algoritmo de Insercin

A diferencia del algoritmo de Seleccin, el


tiempo de ejecucin del Algoritmo de
Insercin depende del orden original de los
elementos
El orden mximo de este algoritmo, al igual
que los dos algoritmos anteriores, esta en
O(n2)

7
Anlisis Algoritmo de Insercin
void Insertar(int A[], int n) Consideremos como
{ int i, j, x; barmetro la instruccin
for (i=1; i<n; i++) j>=0 y x<A[j]
{ x = A[i]; Para el valor i, en el peor
j = i-1; caso x = A[i] se tiene que
while((j>=0) && (x<A[j])) comparar con los valores
{ A[j+1] = A[j]; A[i-1], , A[0] (i veces)
j = j-1; Por tanto, el nmero total
} de operaciones a realizar
es:
A[j+1] = x;
} n
n(n + 1)
i =

} 1
i =1 2

Algoritmo QuickSort

Uno de los mejores algoritmos para ordenar


un arreglo
Quicksort es un algoritmo en O(n2), sin
embargo, en promedio se comporta como un
algoritmo O(n logn)

8
Algoritmo QuickSort

Algoritmo QuickSort

9
Actividad

Implementar el algoritmo QuickSort en C


Realizar una investigacin del algoritmo
ordenar por fusin (mergesort), identificando:
Idea principal de cmo trabaja el algoritmo
Complejidad del algoritmo
Ejemplo de una implementacin en C

10

También podría gustarte