Documentos de Académico
Documentos de Profesional
Documentos de Cultura
OBJETIVOS
FUNDAMENTO TEÓRICO
El ordenar un grupo de datos significa mover los datos o sus referencias para que queden en una
secuencia por categorías y en forma ascendente o descendente.
Los internos: Son aquellos en los que los valores a ordenar están en memoria principal, por lo que se
asume que el tiempo que se requiere para acceder a cualquier elemento sea el mismo (a[1], a[500], etc.).
Los externos: Son aquellos en los que los valores a ordenar están en memoria secundaria (disco duro,
cinta, pendrive, nube, etc.), por lo que se asume que el tiempo que se requiere para acceder a cualquier
elemento depende de la última posición accesada (posición 1, posición 500, etc.).
El hecho de que la información está ordenada, nos sirve para poder encontrarla y acceder de manera más
eficiente ya que de lo contrario se tendría que hacer de manera secuencia. A continuación se describirán
tres grupos de algoritmos para ordenar información en memoria principal.
Algoritmos de intercambio: En este tipo de algoritmos se toman los elementos de dos en dos, se
comparan y se intercambian si no están en el orden adecuado. Este proceso se repite hasta que se ha
analizado todo el conjunto de elementos y ya no hay intercambios. Entre estos algoritmos se encuentran
intercambio directo (BubbleSort) y ordenación rápida (QuickSort).
Algoritmos de selección: En este tipo de algoritmos se selecciona o se busca el elemento más pequeño (o
más grande) de todo el conjunto de elementos y se coloca en su posición adecuada. Este proceso se
repite para el resto de los elementos hasta que todos son analizados. Entre estos algoritmos se encuentra
el de selección directa.
Algoritmos de inserción: En este tipo de algoritmo los elementos que van a ser ordenados son
considerados uno a la vez. Cada elemento es insertado en la posición apropiada con respecto al resto de
los elementos ya ordenados. Entre estos algoritmos se encuentran el de inserción directa, inserción
binaria, ShellSort y Hashing.
Los métodos directos: Intercambio directo y sus variantes, inserción directa (e inserción binaria) y
selección directa.
Los métodos logarítmicos: ShellSort, QuickSort (ordenación rápida), MergeSort, HeapSort, etc.
UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN | FACULTAD DE INGENIERÍA
ESCUELA PROFESIONAL DE INGENIERÍA EN INFORMÁTICA Y SISTEMAS
ASIGNATURA: PROGRAMACIÓN AVANZADA | CICLO: SEGUNDO | SEMESTRE: 2021-II
PROCEDIMIENTO
Para programar los métodos de ordenación en el lenguaje C++ se definirá una clase abstracta y un
conjunto de clases derivadas. Cada una de las clases derivadas representa uno de los métodos estudiados
en esta unidad.
Todos los algoritmos de ordenación utilizan dos operaciones básicas para llevar a cabo la ordenación de
los elementos de un arreglo: la comparación y el intercambio de los mismos. Por esta razón, en la clase
abstracta se incluyó el método Intercambia() que será común a todas las clases derivadas y que tendrá
por objeto intercambiar los valores de dos posiciones de un arreglo.
A continuación se muestra la manera de programar la clase base abstracta, la cual tiene una función virtual
pura que se redefinirá en cada subclase dependiendo del método de ordenación que se esté
implementando. Además, tiene una función auxiliar Intercambia() para generalizar la operación de
intercambio que será usada por las subclases.
Como ya se mencionó, todos los métodos utilizan dos operaciones básicas para llevar a cabo la
ordenación de los elementos: la comparación y el intercambio de los mismos. Por lo tanto, si lo que quiere
es ordenar son objetos hay que tener en cuenta que se deben sobrecargar los operadores de comparación
en las clases correspondientes.
Para ordenar n elementos (donde n es el número de elementos del arreglo) se realizan n-1 iteraciones por
el arreglo comparando pares de datos. Luego de cada comparación puede o no realizarse un intercambio
del contenido entre dos componentes del arreglo.
Por razones de espacio sólo se incluye la clase InterDiDer en el siguiente trozo de código, quedando a
cargo de usted la construcción del resto del programa.
Debe tenerse en cuenta que la plantilla de la clase InterDirDer utiliza un tipo T. Si el tipo T fuera una
clase clase, entonces en dicha clase se debería sobrecargar el operador << y el operador >> para que los
objetos puedan leerse y escribirse directamente. Asimismo, deberán sobrecargarse los operadores
relacionales <, > y == para que los objetos puedan compararse tal como lo establecen los métodos de
ordenación estudiados.
class Alumno{
private:
int cod;
char nombre[40];
public:
Alumno(){}
bool operator>(Alumno);
friend istream& operator>>(istream &, Alumno &);
friend ostream& operator<<(ostream &, Alumno &);
};
int main(){
Alumno A[10];
int n;
cin>>n;
for(int i = 1; i <= n; i++){
cin>>A[i];
cout<<endl;
}
InterDirDer<Alumno> objIDD;
objIDD.Ordena(A,n);
cout<<"\nDatos ordenados"<<endl;
for(int i = 1; i <= n; i++){
cout<<A[i]<<endl;
}
return 0;
}
ANÁLISIS DE RESULTADOS
● Completar el programa anterior con todos los métodos de ordenación estudiados en la presente
unidad y probar su rendimiento.
● Independice la clase Ordenador y sus clases derivadas en un archivo header (Ordenador.h) de tal
manera que se pueda utilizar en otros programas.
● Implemente un menú de opciones con un switch-case para que el usuario seleccione el método que
desee aplicar.
INVESTIGACIÓN COMPLEMENTARIA
Implemente los métodos de búsqueda en C++ usando como base el siguiente diagrama de clases que
consta de una clase abstracta Buscador y de sus clases derivadas.
REFERENCIAS BIBLIOGRÁFICAS
Guardati, Silvia. Estructura de datos orientada a objetos Algoritmos con C++ . Editorial McGraw Hill,
España, 2000.