Você está na página 1de 7

Repblica Bolivariana de Venezuela

Ministerio del Poder Popular para la Educacin Superior


Universidad Nacional Experimental Politcnica Antonio Jos de Sucre
Carora-Estado-Lara

Computacin II
Algoritmos de Ordenamiento

Participante:
Jos Sequera Exp. 20121 C043
Yordano Carrasco Exp. 20121 C030
Vctor Escobar Exp. 20111 C078
Nelson Rodrguez Exp. 20111 C098
Carora, Marzo del 2015

Mtodos de Ordenamiento
Ordenamiento
Es la operacin de arreglar los registros de una tabla en algn orden
secuencial de acuerdo a un criterio de ordenamiento. El ordenamiento se
efecta con base en el valor de algn campo en un registro. El propsito
principal de un ordenamiento es el de facilitar las bsquedas de los
miembros del conjunto ordenado.
El ordenar un grupo de datos significa mover los datos o sus referencias
para que queden en una secuencia tal que represente un orden, el cual
puede ser numrico, alfabtico o incluso alfanumrico, ascendente o
descendente.
Mtodos de Ordenamiento Elementales:
1. Insercin
2. Seleccin
3. Burbujeo
Mtodos de Ordenamiento no Elementales:
1. Shell
2. Quick Sort
3. Fusin
Tipos de Ordenamiento:

Ordenamiento Interno Ordenamiento de datos en Memoria


Principal. (La lectura y grabacin se hacen en registros)
Ordenamiento Externo Ordenamiento de datos en Disco.
Tipos de Entrada de Datos:

a. Entrada Ordenada = MEJOR CASO


b. Entrada Orden Inverso = PEOR CASO
c. Entrada Desordenada = CASO AL AZAR
Tipos de Algoritmo

Algoritmo Sensible: Modifica su tiempo de ejecucin segn el


tipo de entrada.
Algoritmo No Sensible: Su tiempo de ejecucin es
independiente al tipo de entrada.
Algoritmo Estable: Aquellos que teniendo clave repetida,
mantiene su posicin inicial igual a la final.
Algoritmo No Estable: Aquello que no respetan la posicin
inicial igual que la final teniendo claves repetidas

Mtodos Elementales:
1. ORDENAMIENTO POR SELECCIN
DESCRIPCIN.
Buscas el elemento ms pequeo de la lista.
Lo intercambias con el elemento ubicado en la primera posicin de
la lista.
Buscas el segundo elemento ms pequeo de la lista.
Lo intercambias con el elemento que ocupa la segunda posicin en
la lista.
Repites este proceso hasta que hayas ordenado toda la lista.
ANLISIS DEL ALGORITMO.
Requerimientos de Memoria: Al igual que el ordenamiento burbuja,
este algoritmo slo necesita una variable adicional para realizar los
intercambios.
Tiempo de Ejecucin: El ciclo externo se ejecuta n veces para una
lista de n elementos. Cada bsqueda requiere comparar todos los
elementos no clasificados.
Ventajas:
1. Fcil implementacin.
2. No requiere memoria adicional.
3. Rendimiento constante: poca diferencia entre el peor y el

mejor caso.
Desventajas:
1. Lento.
2. Realiza numerosas comparaciones.
2. ORDENAMIENTO POR INSERCIN DIRECTA
DESCRIPCIN.
El algoritmo de ordenacin por el mtodo de insercin directa es un
algoritmo relativamente sencillo y se comporta razonablemente bien en
gran cantidad de situaciones.
Completa la tripleta de los algoritmos de ordenacin ms bsicos y
de orden de complejidad cuadrtico, junto con SelectionSort y
BubbleSort.
Se basa en intentar construir una lista ordenada en el interior del array a
ordenar.
De estos tres algoritmos es el que mejor resultado da a efectos
prcticos. Realiza una cantidad de comparaciones bastante equilibrada

con respecto a los intercambios, y tiene un par de caractersticas que lo


hacen aventajar a los otros dos en la mayor parte de las situaciones.
Este algoritmo se basa en hacer comparaciones, as que para que
realice su trabajo de ordenacin son imprescindibles dos cosas: un array
o estructura similar de elementos comparables y un criterio claro de
comparacin, tal que dados dos elementos nos diga si estn en orden o
no.
En cada iteracin del ciclo externo los elementos 0 a i forman una
lista ordenada.
ANLISIS DEL ALGORITMO.
Estabilidad: Este algoritmo nunca intercambia registros con claves
iguales. Por lo tanto es estable.
Requerimientos de Memoria: Una variable adicional para realizar
los intercambios.
Tiempo de Ejecucin: Para una lista de n elementos el ciclo
externo se ejecuta n1 veces. El ciclo interno se ejecuta como
mximo una vez en la primera iteracin, 2 veces en la segunda, 3
veces en la tercera, etc.
Ventajas:
1. Fcil implementacin.
2. Requerimientos mnimos de memoria.
Desventajas:
1. Lento.
2. Realiza numerosas comparaciones.
Este tambin es un algoritmo lento, pero puede ser de utilidad para listas
que estn ordenadas o semiordenadas, porque en ese caso realiza muy
pocos desplazamientos.
3.

ORDENAMIENTO POR EL MTODO DE SHELL

DESCRIPCIN
El mtodo Shell es una versin mejorada del mtodo de
insercin directa. Este mtodo tambin se conoce con el nombre de
insercin con incrementos crecientes. En el mtodo de ordenacin
por insercin directa cada elemento se compara para su ubicacin
correcta en el arreglo, con los elementos que se encuentran en la
parte izquierda del mismo. Si el elemento a insertar es ms pequeo
que el grupo de elementos que se encuentran a su izquierda, es
necesario efectuar entonces varias comparaciones antes de su
ubicacin.
Shell propone que las comparaciones entre elementos se
efecten con saltos de mayor tamao pero con incrementos

decrecientes, as, los elementos quedarn ordenados en el arreglo


ms rpidamente.
El Shell sort es una generalizacin del ordenamiento por
insercin, teniendo en cuenta dos observaciones:
1. El ordenamiento por insercin es eficiente si la entrada est
"casi ordenada".
2. El ordenamiento por insercin es ineficiente, en general, porque
mueve los valores slo una posicin cada vez.
El algoritmo Shell sort mejora el ordenamiento por insercin
comparando elementos separados por un espacio de varias
posiciones. Esto permite que un elemento haga "pasos ms grandes"
hacia su posicin esperada. Los pasos mltiples sobre los datos se
hacen con tamaos de espacio cada vez ms pequeos. El ltimo
paso del Shell sort es un simple ordenamiento por insercin, pero
para entonces, ya est garantizado que los datos del vector estn casi
ordenados.
4.

ORDENAMIENTO QUICK SORT

DESCRIPCIN
El ordenamiento por particin (Quick Sort) se puede definir en
una forma ms conveniente como un procedimiento recursivo.
Tiene aparentemente la propiedad de trabajar mejor para
elementos de entrada desordenados completamente, que para
elementos semiordenados. Esta situacin es precisamente la opuesta
al ordenamiento de burbuja.
Este tipo de algoritmos se basa en la tcnica "divide y
vencers", o sea es ms rpido y fcil ordenar dos arreglos o listas de
datos pequeos, que un arreglo o lista grande.
Normalmente al inicio de la ordenacin se escoge un elemento
aproximadamente en la mitad del arreglo, as al empezar a ordenar,
se debe llegar a que el arreglo este ordenado respecto al punto de
divisin o la mitad del arreglo.
Se podr garantizar que los elementos a la izquierda de la mitad
son los menores y los elementos a la derecha son los mayores.
Los siguientes pasos son llamados recursivos con el propsito
de efectuar la ordenacin por particin al arreglo izquierdo y al arreglo
derecho, que se obtienen de la primera fase. El tamao de esos
arreglos en promedio se reduce a la mitad.
As se contina hasta que el tamao de los arreglos a ordenar
es 1, es decir, todos los elementos ya estn ordenados.
En promedio para todos los elementos de entrada de tamao n,
el mtodo hace O(n log n) comparaciones, el cual es relativamente
eficiente.

Cdigo en C para un ordenamiento en Quicksort


Quicksort.c
// Funcin para dividir el array y hacer los intercambios
int divide(int *array, int start, int end) {
int left;
int right;
int pivot;
int temp;
pivot = array[start];
left = start;
right = end;
// Mientras no se cruzen los ndices
while (left < right) {
while (array[right] > pivot) {
right--;
}
while ((left < right) && (array[left] <= pivot)) {
left++;
}
// Si todava no se cruzan los indices seguimos intercambiando
if (left < right) {
temp = array[left];
array[left] = array[right];
array[right] = temp;
}
}
// Los ndices ya se han cruzado, ponemos el pivot en el lugar que le corresponde
temp = array[right];
array[right] = array[start];
array[start] = temp;
// La nueva posicin del pivot
return right;
}
// Funcin recursiva para hacer el ordenamiento
void quicksort(int *array, int start, int end)
{
int pivot;
if (start < end) {
pivot = divide(array, start, end);
// Ordeno la lista de los menores
quicksort(array, start, pivot - 1);
// Ordeno la lista de los mayores
quicksort(array, pivot + 1, end);
}
}

Main.c
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include "quicksort.cpp"
using namespace std;
int main()
{
int const MAX = 100;
int arraySize;
clock_t start_time;
clock_t final_time;
double total_time;
start_time = clock();
cout << "Ingresa tamanyo: " << endl;
cin >> arraySize;
int a[arraySize];
// Para que el rand no genere siempre los mismos nmeros, utilizando la hora del sistema
srand(time(0));
// Para generar enteros aleatorios usamos rand()
for (int i = 0; i < arraySize; i++) {
a[i] = rand() % MAX;
}
cout << "Array antes de ordenarse: " << endl;
for (int i = 0; i < arraySize; i++) {
cout << a[i] << " ";
}
cout << endl << endl;
quicksort(a, 0, arraySize - 1);
final_time = clock();
total_time = ((double)(final_time - start_time)) / CLOCKS_PER_SEC;
printf("Tiempo de ejecucin : %lf segundos \n", total_time);
cout << "Array ordenado " << endl;
for (int i = 0; i < arraySize; i++ ){
cout << a[i] << "-";
}
cout << endl << endl;
return 0;
}

Você também pode gostar