Você está na página 1de 13

UNIVERSIDAD POLITCNICA DE VICTORIA

@ DISTANCIA

PROGRAMACION
ORIENTADA A
OBJETOS
(PROYECTO UNIDAD 1)
ORDEMANIENTOS

Integrantes:
Diana Saucedo 1330284
Leslie Salazar 1330533

Catedrtico:
Dr. Mario Garza Fabre

Jaumave, Tam.

Abril-2014

INDICE
1

Introduccin

Pg. 3

Tipos de Algoritmo

Pg. 4

2.1

Algoritmos iterativo

Pg. 4

2.2

Algoritmos recursivos

Pg. 4

Mtodo java de ordenacin por seleccin

Pg.5

Mtodo java de ordenacin por insercin

Pg.6

Mtodo java de ordenacin burbuja

Pg.7

Mtodo java de ordenacin rpido (quicksort)

Pg.9

Mtodo java de ordenacin por mezcla

Pg.10

Complejidad

Pg.13

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

INTRODUCCIN
Los algoritmos de ordenamiento nos permiten, como su nombre lo
dice, ordenar. En este caso, nos servirn para ordenar vectores o
matrices con valores asignados aleatoriamente. Nos centraremos
en los mtodos ms populares, analizando la cantidad de
comparaciones que suceden, el tiempo que demora y revisando el
cdigo, escrito en Java, de cada algoritmo.
Este informe nos permitir conocer ms a fondo cada mtodo
distinto de ordenamiento, desde uno simple hasta el ms complejo.
Se realizaran comparaciones en tiempo de ejecucin, pre-requisitos
de cada algoritmo, funcionalidad, alcance, etc.

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

2 TIPOS DE ALGORITMOS
Para poder ordenar una cantidad determinada de nmeros
almacenadas en un vector o matriz, existen distintos mtodos
(algoritmos) con distintas caractersticas y complejidad.
Existe desde el mtodo ms simple, como el Bubblesort (o Mtodo
Burbuja), que son simples iteraciones, hasta el Quicksort (Mtodo
Rpido), que al estar optimizado usando recursin, su tiempo de
ejecucin es menor y es ms efectivos.

2.1 METODOS ITERATIVOS


Estos mtodos son simples de entender y de programar ya que son
iterativos, simples ciclos y sentencias que hacen que el vector
pueda ser ordenado.
Dentro de los Algoritmos iterativos encontramos:
Insercin
Seleccin
Burbuja
Heapsort

2.2 - METODOS RECURSIVOS


Estos mtodos son an ms complejos, requieren de mayor
atencin y conocimiento para ser entendidos. Son rpidos y
efectivos, utilizan generalmente la tcnica Divide y vencers, que
consiste en dividir un problema grande en varios pequeos para
que sea ms fcil resolverlos.
Mediante llamadas recursivas a s mismos, es posible que el tiempo
de
ejecucin
y
de
ordenacin
sea
ms
ptimo.
Dent de los algoritmos recursivos encontramos:
Ordenamiento por Mezclas (merge)
Ordenamiento Rpido (quick)
4

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

CODIGOS:
METODO JAVA DE ORDENACION POR SELECCIN
El mtodo seleccin ordena el arreglo, buscando el elemento ms
pequeo y lo coloca al comienzo y as sucesivamente hasta llegar a
completar la operacin.
import java.util.Scanner;
class selec{
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
int temp;
int[] numeros=new int[5];
System.out.println("llenando arreglo");
for(int i=0;i<numeros.length;i++){
System.out.println("digite dato entero numero:-- " + i );
numeros[i]=sc.nextInt();
}
System.out.println("el orden original:....");
for(int i=0;i<numeros.length;i++){
System.out.println(i + " : " + numeros[i]);
}
System.out.println("ordenando por seleccion");
for(int i=0;i<numeros.length-1;i++){
int minimo=i;
for(int j=i+1;j<numeros.length;j++){
if(numeros[j]<numeros[minimo]){
minimo=j;
}
}
temp=numeros[i];
numeros[i]=numeros[minimo];
numeros[minimo]=temp;
}
System.out.println("orden correcto:...");
for(int i=0;i<numeros.length;i++){
System.out.println(i + " : " + numeros[i]);
}
}
}

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

METODO JAVA DE ORDENACION POR INSERCIN


public class inser {
public static void main(String[] args) {
OrdenamientoInsercion orden = new OrdenamientoInsercion();
int[] nums = {1,4,9,59,23,26,20,1,23,56,7};
int[] ordenarInsercion = orden.ordenarInsercion(nums);
for (int i = 0; i < ordenarInsercion.length; i++) {
System.out.println(ordenarInsercion[i]);
}
}
public int[] ordenarInsercion(int[] array){
int aux;
for (int i = 1; i < array.length; i++) {
aux = array[i];
for (int j = i-1; j >=0 && array[j]>aux; j--) {
array[j+1]=array[j];
array[j]=aux;
}
}
return array;
}
}

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

METODO JAVA DE ORDENACION BURBUJA


El mtodo de la burbuja es uno de los ms simples, es tan fcil
como comparar todos los elementos de una lista contra todos, si se
cumple que uno es mayor o menor a otro, entonces los intercambia
de posicin.
El mtodo de la burbuja compara cada elemento con el que tiene a
justo a continuacin y si estn desordenados los intercambia.
public class burbuja1 {
public static void main(String[] args) {
int [] arre={1, 23, 10, 9, 5};
burbuja (arre);
}
public static void burbuja(int [] A){
int j,k, aux;
boolean f=false;
String pasada="";
for (k=0;k<A.length;k++) {
for(j=1;j<A.length;j++) {
if(A[j]<A[j-1]){
aux=A[j];
A[j]=A[j-1];
A[j-1]=aux;
System.out.println("A[j]="+A[j]+" A[j-1]="+A[j-1]+"
AUX="+aux);
for(int i=0;i<A.length;i++){
pasada+=" "+Integer.toString(A[i]);
}
System.out.println("Arreglo A={" +pasada+" }");
pasada="";
}
}
}
}
}

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

METODO JAVA DE ORDENACION RAPIDO


El algoritmo de ordenacin por montculos o Heap Sort recorre el
conjunto de elementos desde la posicin de la mitad hasta la
primera organizando el montculo correspondiente a dicho
elemento. Una vez terminado este proceso, se inicia el proceso de
ordenacin intercambiando el primer elemento por el ltimo del
arreglo y reorganizando el montculo a partir de la primera posicin.
// Ordenacion por monticulos - HeapSort
public static void ordenacionMonticulos(int[] v) {
final int N = v.length;
for(int nodo = N/2; nodo>=0; nodo--) hacerMonticulo(v, nodo,
N-1);
for(int nodo = N-1; nodo>=0; nodo--) {
int tmp = v[0];
v[0]
= v[nodo];
v[nodo] = tmp;
hacerMonticulo(v, 0, nodo-1);
}
}
public static void hacerMonticulo(int[] v, int nodo, int fin) {
int izq = 2*nodo+1;
int der = izq+1;
int may;
if(izq>fin) return;
if(der>fin) may=izq;
else may= v[izq]>v[der]?izq:der;
if(v[nodo] < v[may]) {
int tmp = v[nodo];
v[nodo] = v[may];
v[may] = tmp;
hacerMonticulo(v, may, fin);
}
}

La complejidad del algoritmo de ordenacin por montculos es O(n


log n) teniendo en cuenta que el proceso de organizar el montculo
en el peor caso solamente tiene que hacer intercambios sobre una
sola lnea de elementos desde la raz del rbol hasta alguna de las
hojas para un mximo de log n intercambios.

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

METODO JAVA DE ORDENACION RAPIDO


(QUICKSORT)
Sin duda, este algoritmo es uno de los ms eficientes. Este mtodo
es el ms rpido gracias a sus llamadas recursivas, basndose en
la teora de divide y vencers.
Lo que hace este algoritmo es dividir recursivamente el vector en
partes iguales, indicando un elemento de inicio, fin y un pivote (o
comodn) que nos permitir segmentar nuestra lista. Una vez
dividida, lo que hace, es dejar todos los mayores que el pivote a su
derecha y todos los menores a su izq. Al finalizar el algoritmo,
nuestros elementos estn ordenados.
public class quicksort{
public static void quicksort(int A[], int izq, int der) {
int pivote=A[izq]; // tomamos primer elemento como pivote
int i=izq; // i realiza la bsqueda de izquierda a derecha
int j=der; // j realiza la bsqueda de derecha a izquierda
int aux;
while(i<j){
// mientras no se crucen las bsquedas
while(A[i]<=pivote && i<j) i++; // busca elemento mayor que pivote
while(A[j]>pivote) j--;
// busca elemento menor que pivote
if (i<j) {
// si no se han cruzado
aux= A[i];
// los intercambia
A[i]=A[j];
A[j]=aux;
}
}
A[izq]=A[j]; // se coloca el pivote en su lugar de forma que tendremos
A[j]=pivote; // los menores a su izquierda y los mayores a su derecha
if(izq<j-1)
quicksort(A,izq,j-1); // ordenamos subarray izquierdo
if(j+1 <der)
quicksort(A,j+1,der); // ordenamos subarray derecho
}
}

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

METODO JAVA DE ORDENACION POR MEZCLA


El ordenamiento por mezcla incorpora dos ideas principales para
mejorar su tiempo de ejecucin:
1. Una lista pequea necesitar menos pasos para ordenarse
que una lista grande.
2. Se necesitan menos pasos para construir una lista ordenada a
partir de dos listas tambin ordenadas, que a partir de dos
listas desordenadas. Por ejemplo, slo ser necesario
entrelazar cada lista una vez que estn ordenadas.
Este es un ejemplo del mtodo de ordenamiento recursivo
MergeSort aplicado a arreglos unidimensionales.
import java.io.*;
public class ordenamiento_recursivo {
public static void main(String[] args)throws IOException {
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
MergeSort x = new MergeSort();
System.out.print("Ingrese la longuitud del arreglo: ");
int L = Integer.parseInt(br.readLine());
int A[] = new int[L];
for (int i = 0; i < L; i++)
{
System.out.print("A["+(i+1)+"] : ");
A[i] = Integer.parseInt(br.readLine());
}
A = x.OrdenaMerge(A);
x.imprimir(A);
br.readLine();
}
}
class MergeSort
{
private int A[];
public int[] OrdenaMerge(int[] L) {
int n = L.length;
if (n > 1){

10

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

int m = (int) (Math.ceil(n/2.0));


int [] L1 = new int[m];
int [] L2 = new int[n-m];
for (int i = 0; i < m; i++){
L1[i] = L[i];
}
for (int i = m; i < n; i++){
L2[i-m] = L[i];
}
L = merge(OrdenaMerge(L1), OrdenaMerge(L2));
}
return L;
}
public int[] merge(int[] L1, int[] L2) {
int[] L = new int[L1.length+L2.length];
int i = 0;
while ((L1.length != 0) && (L2.length != 0)) {
if (L1[0] < L2[0]){
L[i++] = L1[0];
L1 = eliminar(L1);
if (L1.length == 0){
while (L2.length != 0) {
L[i++] = L2[0];
L2 = eliminar(L2);
}
}
}
else{
L[i++] = L2[0];
L2 = eliminar(L2);
if (L2.length == 0) {
while (L1.length != 0) {
L[i++] = L1[0];
L1 = eliminar(L1);
}
}
}
}
return L;
}
public int[] eliminar(int [] l){
int [] L = new int[l.length-1];
for(int i = 1; i < l.length; i++){
L[i-1] = l[i];

11

PROGRAMACION ORIENTADA A OBJETOS


}
return L;
}
public void imprimir(int [] A){
for(int i = 0; i < A.length; i++){
System.out.print(""+A[i]+" ");
}
}
}

12

ORDENAMIENTOS

PROGRAMACION ORIENTADA A OBJETOS

ORDENAMIENTOS

COMPLEJIDAD
Cada algoritmo de ordenamiento por definicin tiene operaciones y
clculos mnimos y mximos que realiza (complejidad), a
continuacin una tabla que indica la cantidad de clculo que
corresponden a cada mtodo de ordenamiento:

Algoritmo

Operaciones mximas

Burbuja

(n)

Insercion

(n/4)

Seleccin

(n)

Heap Sort

(n logn)

Merge

(n logn)

Quick

(n) en peor de los casos y (n


logn) en el promedio de los casos.

13

Você também pode gostar