Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructura de datos
10:00-11:00
Unidad 5
Algoritmos de ordenamiento
Docente
Alumno
Carrera
Grupo: IS3
Acapulco, Guerrero
-1-
ealizar un programa en java donde aplique los algoritmos de ordenamiento
como: Burbuja, QuickSort, ShellSort, Radix
1. Carga de datos
2. Algoritmo de ordenamiento Burbuja
3. Algoritmo de ordenamiento QuickSort
4. .- Algoritmo de ordenamiento ShelSort
5. .- Algoritmo de ordenamiento Radix
6. .- Salir
-2-
A continuación se presenta una breve descripción sobre como operan cada
uno los algoritmos de ordenamiento:
Resituar 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 ordenada.
La lista queda separada en dos sublistas, una formada por los elementos a
la izquierda del pivote, y otra por los elementos a su derecha.
Repetir este proceso de forma recursiva para cada sublista mientras éstas
contengan más de un elemento. Una vez terminado este proceso todos los
elementos estarán ordenados.
-3-
.- Algoritmo de ordenamiento ShelSort
-4-
Metodo burbuja
//Metodo Burbuja
public static void Burbuja(){
int temporal;
int tamaño = aleatorios.length;
for (int i = 1; i < tamaño; i++) {
for (int k = tamaño - 1; k >= i; k--) {
if(aleatorios[k] < aleatorios[k-1]){
temporal = aleatorios[k];
aleatorios[k] = aleatorios[k-1];
aleatorios[k-1]= temporal;
}
}
}
imprimirArreglo(aleatorios);
}
Metodo QuickSort
//Metodo de QuickSort
public static void QuickSort(int numeros[], int izquierda,
int derecha){
//Se toma como pivote el primer valor
int pivote = numeros[izquierda];
//Se definen los dos lados y un auxiliar
int i = izquierda;
int j = derecha;
int aux;
while(i<j){
while (numeros[i] <= pivote && i < j)
i++;
while (numeros[j] > pivote)
j--;
if (i<j) {
aux = numeros[i];
numeros[i]= numeros[j];
numeros[j]=aux;
}
}
numeros[izquierda] = numeros[j];
-5-
numeros[j] = pivote;
if (izquierda < j-1)
QuickSort(numeros,izquierda,j-1);
if (j+1 < derecha)
QuickSort(numeros,j+1,derecha);
}
-6-
int[][] m = new int[arreglo.length][2];
int[] q = new int[0x100];
int i,j,k,l,f = 0;
for(k=0;k<4;k++){
for(i=0;i<(m.length-1);i++)
m[i][1] = i+1;
m[i][1] = -1;
for(i=0;i<q.length;i++)
q[i] = -1;
for(f=i=0;i<arreglo.length;i++){
j = ((0xFF<<(k<<3))&arreglo[i])>>(k<<3);
if(q[j] == -1)
l = q[j] = f;
else{
l = q[j];
while(m[l][1] != -1)
l = m[l][1];
m[l][1] = f;
l = m[l][1];
}
f = m[f][1];
m[l][0] = arreglo[i];
m[l][1] = -1;
}
for(l=q[i=j=0];i<0x100;i++)
for(l=q[i];l!=-1;l=m[l][1])
arreglo[j++] = m[l][0];
}
Metodo Radix
Codigo completo
package P_1;
-7-
public static void InvocarAleatorio(){
int indice = 0;
//Bucle que se ejecuta hasta que se haya llenado
while(indice < 999) {
int propuesto = (int)(Math.random()*5000);
boolean repetido = false;
//Bucle que se ejecuta siempre que el número no esté
repetido
while(!repetido) {
//Bucle que recorre el arreglo comparando el
número propuesto con cada uno de los elementos del arreglo
for(int i=0; i<indice; i++) {
if(propuesto == aleatorios[i]) {
repetido = true;
break;
}
}
if(!repetido) {
aleatorios[indice] = propuesto;
indice++;
}
}
}
imprimirArreglo(aleatorios);
}
//Metodo Burbuja
public static void Burbuja(){
int temporal;
int tamaño = aleatorios.length;
for (int i = 1; i < tamaño; i++) {
for (int k = tamaño - 1; k >= i; k--) {
if(aleatorios[k] < aleatorios[k-1]){
temporal = aleatorios[k];
aleatorios[k] = aleatorios[k-1];
aleatorios[k-1]= temporal;
}
}
}
imprimirArreglo(aleatorios);
}
-8-
//Metodo de QuickSort
public static void QuickSort(int numeros[], int izquierda,
int derecha){
//Se toma como pivote el primer valor
int pivote = numeros[izquierda];
//Se definen los dos lados y un auxiliar
int i = izquierda;
int j = derecha;
int aux;
while(i<j){
while (numeros[i] <= pivote && i < j)
i++;
while (numeros[j] > pivote)
j--;
if (i<j) {
aux = numeros[i];
numeros[i]= numeros[j];
numeros[j]=aux;
}
}
numeros[izquierda] = numeros[j];
numeros[j] = pivote;
if (izquierda < j-1)
QuickSort(numeros,izquierda,j-1);
if (j+1 < derecha)
QuickSort(numeros,j+1,derecha);
}
//Metodo ShellSort
public static void ShellSort(int arreglo[]){
int salto, aux, i;
boolean cambios;
-9-
for (i = salto; i < arreglo.length; i++){
//Se da una pasada
if (arreglo[i - salto] > arreglo[i]) {
//Si están desordenados
aux = arreglo[i];
// Se reordenan
arreglo[i] = arreglo[i - salto];
arreglo[i - salto] = aux;
cambios = true; //Y se
marca como cambio.
}
}
}
}
}
- 10 -
}
for(l=q[i=j=0];i<0x100;i++)
for(l=q[i];l!=-1;l=m[l][1])
arreglo[j++] = m[l][0];
}
}
import java.util.Scanner;
int eleccion = 0;
do{
Scanner entdatos = new Scanner(System.in);
System.out.println("1. Carga de Datos\n"
+"2. Algoritmo de ordenamiento Burbuja\n"
+"3. Algoritmo de ordenamiento QuickSort\n"
+"4. Algoritmo de ordenamiento ShellSort\n"
+"5. Algoritmo de ordenamiento Radix\n"
+"6. Salir\n"
+"Elija un opcion para continuar");
eleccion = entdatos.nextInt();
switch(eleccion){
case 1:
System.out.println("Arreglo aleatorio");
Metodos.InvocarAleatorio();
break;
case 2:
System.out.println("Arreglo con ordenamiento
Burbuja");
Metodos.Burbuja();
break;
case 3:
System.out.println("Arreglo con ordenamiento
QuickSort");
Metodos.InvocarQuickSort();
- 11 -
break;
case 4:
System.out.println("Arreglo con ordenamiento
ShellSort");
Metodos.InvocarShellSort();
break;
case 5:
System.out.println("Arreglo con ordenamiento
Radix");
Metodos.InvocarRadix();
break;
case 6:
System.out.println("Programa Finalizado");
break;
default:
System.out.println("Eleccion invalida");
}
}while(eleccion!=6);
}
- 12 -
- 13 -
- 14 -
- 15 -
}
Conclusiones
- 16 -
Bibliografía
EcuRed. (s. f.-a). Algoritmo de Ordenamiento Shell - EcuRed. Recuperado 3 de
diciembre de 2021, de
https://www.ecured.cu/Algoritmo_de_Ordenamiento_Shell
de 2021, de https://www.ecured.cu/Ordenamiento_Radix
https://www.ecured.cu/QuickSort
Joyanes, L. A., & Martínez, I. Z. (2008). Estructura de datos en Java (1.a ed.).
McGraw-Hill Education.
- 17 -