Documentos de Académico
Documentos de Profesional
Documentos de Cultura
CURSO
: Algoritmos y Estructura De
Datos II
DOCENTE
ALUMNOS
CICLO
: III
INDICE
INDICE.......................................................................................................... 2
INTRODUCCION............................................................................................ 3
OBJETIVOS.................................................................................................... 4
ORDENAMIENTO........................................................................................... 5
1.
2.
3.
4.
CONCLUSIONES.......................................................................................... 21
REFERENCIAS............................................................................................. 22
INTRODUCCIN
Los mtodos de ordenamiento nos permiten, como su nombre lo dice,
ordenar. En este caso, nos servirn para ordenar vectores con valores
asignados aleatoriamente. Los cules sern necesarios para luego buscar
datos de una manera mucho ms rpida y eficiente. Nos centraremos en
los mtodos (Shell short, Merge short, Quick short y Heap short).
Cada mtodo de ordenamiento contara con una animacin para el mejor
entendimiento de los mismos, adems de su codificacin en java.
OBJETIVOS
ORDENAMIENTO
Es una suma de elementos dispuestos de una determinada manera
para lograr la consecucin de un fin determinado.
MTOS DE ORDENAMIENTO
Es un algoritmo que pone elementos de una lista o un vector en una
secuencia dada por una relacin de orden, es decir; el resultado de la salida
puede ser una permutacin o un reordenamiento de la entrada que satisfaga
la relacin de orden dada. Las relaciones de orden que ms se utilizan son el
de orden numrico y el orden Lexicogrfico.
Clasificacin
Ordenamiento Interno
Estos trabajan en memoria principal y sus implementaciones son muy
variadas, de manera que la eleccin del algoritmo adecuado debe realizarse
con criterios de eficiencia (tiempo y ejecucin) y en funcin de la memoria
disponible. Dividiremos los mtodos en dos grandes grupos:
1. Directos
Burbuja
Seleccin
Insercin
2. Logartmicos
Shell short
Merge short
Heap short
Quick short
Radix
Ordenamiento Externo
La ordenacin de archivos se lleva a cabo cuando el volumen de los datos a
tratar es demasiado grande y los mismos no caben en la memoria principal de
la computadora.
Los dos mtodos de ordenamiento ms importantes son los basados en la
mezcla directa y en la mezcla equilibrada.
Paso 1:
25 59 94 65 23
45 27 73 25
Paso 3:
13 27 94 33 39
25 59 94 65
10 14 73 25 23 13 27 94 33 39 25 59 94 65 82 45
Paso 4:
Paso 5:
10 14 13
94 82
25 23 13
27 94 33
39 25 59
94
39 65 73
45
45
Generando.
25 23 33
27 25 59
94
Paso 5: Finalmente.
10 14 13 25 23 33 27 25 59 39 65 73 45 94 82 94
10 13 14 23 25 25 27 33 39 45 59 65 73 82 94 94
FUNCIONAMIENTO:
Pseudocdigo:
Cdigo java:
package shellsort;
package shellsort;
public class ShellSort {
public static void ordenar(long[] numeros) {
int salto, i;
long aux;
boolean cambios;
for (salto = numeros.length / 2; salto != 0; salto /= 2) {
cambios = true;
while (cambios) {
cambios = false;
for (i = salto; i < numeros.length; i++)
if (numeros[i - salto] > numeros[i]) {
aux = numeros[i];
numeros[i] = numeros[i - salto];
numeros[i - salto] = aux;
cambios = true;
}
}
}
}
}
Ejemplo:
5-3-7-6-2-14
FUNCIONAMIENTO:
DIAGRAMA DE FLUJO:
CDIGO JAVA:
package quicksort;
public class QuickSort {
public void ordenar(int[] arreglo, int inicio, int fin) {
int i = inicio;
int f = fin;
int aux;
int pivote = arreglo[(i + f) / 2];
do {
while (arreglo[i] < pivote) {
i++;
}
while (arreglo[f] > pivote) {
f--;
}
if (i <= f) {
aux = arreglo[i];
arreglo[i] = arreglo[f];
arreglo[f] = aux;
i++;
f--;
}
} while (i <= f);
if (inicio < f) {
ordenar(arreglo, inicio, f);
}
if (i < fin) {
ordenar(arreglo, i, fin);
}
}
}
[1, 3, 2, 6]
[ 4, 6]
[1, 3]
[ 2, 6]
[ 4, 6]
[1, 3]
[ 2, 6]
[1, 2, 3, 6]
Paso 5: Finalmente
[1, 2, 2, 3, 4, 5, 6, 6]
FUNCIONAMIENTO:
Pseudocdigo
MergeSort (T [ ] a, entero n)
{
si ( n>1) entonces
{
a1= a[0...n/2 -1] ; // Primera mitad
a2= a[n/2...n-1] ; // Segunda mitad
MergeSort(a1, n/2);
MergeSort(a2, n n/2);
Merge(a1,a2,a, n);
}
}
Merge(T [ ] a1,T [ ] a2, T [ ] a, entero n)
{
entero i, j, k;
i = j = k =0;
mientras(i < n/2 && j < n - n/2)
{
si(a1[i] < a2[j]) entonces
{
b[k] = a1 [i];
i++; k++;
}
sino
{
b[k] = a2[j];
j++; k++;
}
}
mientras(i < n/2)
{
b[k] = a1 [i];
i++;
k++;
}
mientras(j < n-n/2)
{
b[k] = a2 [j];
j++; k++;
}
}
CDIGO JAVA:
package merge;
import java.util.Arrays;
public class MergeSort {
public static void ordenacionMergeSort(int vec[]) {
if (vec.length <= 1)
return;
int mitad = vec.length / 2;
int izq[] = Arrays.copyOfRange(vec, 0, mitad);
int der[] = Arrays.copyOfRange(vec, mitad, vec.length);
ordenacionMergeSort(izq);
ordenacionMergeSort(der);
combinarVector(vec, izq, der);
}
public static void combinarVector(int v[], int izq[], int der[]) {
int i = 0;
int j = 0;
for (int k = 0; k < v.length; k++) {
if (i >= izq.length) {
v[k] = der[j];
j++;
continue;
}
if (j >= der.length) {
v[k] = izq[i];
i++;
continue;
}
if (izq[i] < der[j]) {
v[k] = izq[i];
i++;
} else {
v[k] = der[j];
j++;
}
}
}
}
}
public static void combinarVector(long v[], long izq[],
long der[]) {
int i = 0;
int j = 0;
for (int k = 0; k < v.length; k++) {
if (i >= izq.length) {
v[k] = der[j];
j++;
continue;
}
if (j >= der.length) {
v[k] = izq[i];
i++;
continue;
}
if (izq[i] < der[j]) {
v[k] = izq[i];
i++;
} else {
v[k] = der[j];
j++;
}
}
}
}
73 - 50 - 36 - 21 - 46 - 27 - 9 - 18 - 10 30
FUNCIONAMIENTO:
Diagrama de flujo:
CDIGO JAVA:
package heapsort;
public class HeapSort {
private static int[] a;
int n;
int left;
int right;
int largest;
public void buildheap(int[] a) {
n = a.length - 1;
for (int i = n / 2; i >= 0; i--) {
maxheap(a, i);
}
}
public void maxheap(int[] a, int i) {
left = 2 * i;
right = 2 * i + 1;
if (left <= n && a[left] > a[i]) {
largest = left;
} else {
largest = i;
}
if (right <= n && a[right] > a[largest]) {
largest = right;
}
if (largest != i) {
exchange(i, largest);
maxheap(a, largest);
}
}
public void exchange(int i, int j) {
int t = a[i];
a[i] = a[j];
a[j] = t;
}
public void sort(int[] a0) {
a = a0;
buildheap(a);
for (int i = n; i > 0; i--) {
exchange(0, i);
n = n - 1;
maxheap(a, 0);
}
}
}
package heapsort;
import java.util.Random;
import java.util.Scanner;
public class PruebaHeapSort {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Ingrese nmero de elementos a
ordenar ");
int n = sc.nextInt();
int[] v = new int[n];
generarV(v);
mostrarV(v);
heapsort(v);
}
private static void heapsort(int[] v) {
System.out.println("Vector ordenado");
HeapSort m = new HeapSort();
m.sort(v);
mostrarV(v);
}
private static void mostrarV(int[] v) {
System.out.println();
for (int i = 0; i < v.length; i++) {
System.out.println(v[i]);
}
System.out.println();
}
private static void generarV(int[] v) {
Random r = new Random();
for (int i = 0; i < v.length; i++) {
v[i] = r.nextInt(10);
}
}
}
CONCLUSIONES
REFERENCIAS
Y. Langsam, M. J. Augenstein, A. Tenenbaum. Data Structures using C
and C++. Prentice Hall, Second edition. ISBN 0-13-036997-7.
Csar Liza vila, Estructuras De Datos Con C++.
Rosita Wachenchauzer, Margarita Manterola, Maximiliano Curia, Marcos
Medrano, Nicols Paez, Algoritmos de Programacin con Python.
Pginas visitadas
https://es.wikipedia.org/wiki/Ordenamiento_por_mezcla