Datos personales

lunes, 28 de diciembre de 2009

Metodo de Shell-Sort

Metodo de Shell-Sort

Es una version mejorda del metodo de insercion directa.
En el metodo de ordenaion por insercion directa cada elemento s compara para su ubicacion correcta en el arreglo con los elementos que se encuentra en la parte izquierda del mismo. Si el elemento a insertar es mas pequeño que el grupo de elementos que se encuentra a su izquierda, es necesario efectuar entonces varias comparaciones antes de su ubicacion.

CODIGO:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class shell extends JFrame{
int a[]=new int[10];
int i, n, j;
int max, mayor;
String salida1="", salida2="";
JTextArea areaSalida=new JTextArea(6,6);
JTextArea areaSalida2=new JTextArea(6,6);
JTextField numero=new JTextField(15);

public shell(){
super("Ordenamiento tipo shell");
JLabel etiqueta=new JLabel("Cuantos numeros quieres?");
JLabel etiqueta1=new JLabel("Los numeros son:");

JButton capturar=new JButton("Capturar");
capturar.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent evento){
captura();
}
}
);
JButton ordenar=new JButton("Ordenar");
ordenar.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent evento){
ordena(a,n);
}
}
);
Container contenedor=getContentPane();
contenedor.setLayout(new FlowLayout());
contenedor.add(etiqueta);
contenedor.add(numero);
contenedor.add(capturar);
contenedor.add(etiqueta1);
contenedor.add(areaSalida);
contenedor.add(ordenar);
contenedor.add(areaSalida2);
setSize(300,300);
setVisible(true);
}

public void captura(){
if (numero.getText().equals("")){
JOptionPane.showMessageDialog(null,"Escriba un nombre");
numero.setText("");
}
else{
a[i]=Integer.parseInt(numero.getText());
salida2+=a[i]+"\n";
i++;
numero.setText("");

if (i==5){
n=i;
JOptionPane.showMessageDialog(null,"Fin de la captura");
}
areaSalida.setText(salida2);
}
}

public void muestra(int nn,int a3[]){
for(int k=0;k salida1+=a3[k]+"\n";
areaSalida2.setText(salida1);
}

public int mayores(int ultimo,int a[]){
max=0;
for(i=0;i if(a[i]>=a[max]){
max=i;
mayor=max;
}
return (mayor);
}

public void ordena(int lista[], int n){
int inter=(n/2),x=0,i=0,j=0,k=0,aux;
while(inter>0){
for(i=inter;i x++;
j=i-inter;
while(j>=0){
k=j+inter;
if(lista[j]<=lista[k]){
j--;
}
else{
aux=lista[j];
lista[j]=lista[k];
lista[k]=aux;
j=j-inter;
}
}
}
inter=inter/2;
}
muestra(n,lista);
}

public static void main(String[] args) {
shell aplicacion5 = new shell();
aplicacion5.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}







RadixSort

RadixSort
el algoritmo oredena una secuencia de pares, por esjemplo S, aplicandole dos veces un oredenamiento estable por cubetas: primero usando un componente del par como clave del ordenamiento y despues el segundo comportamiento, pero el correcto es el que se oredena se deve oredenar primero con la K y despues con las L el segundo componente al reves.

CODIGO:

import java.lang.*;
import java.io.*;

public class RadixSort{

public static void radixSort(int[] arr){
if(arr.length == 0)
return;
int[][] np = new int[arr.length][2];
int[] q = new int[0x100];
int i,j,k,l,f = 0;
for(k=0;k<4;k++){
for(i=0;i<(np.length-1);i++)
np[i][1] = i+1;
np[i][1] = -1;
for(i=0;i q[i] = -1;
for(f=i=0;i j = ((0xFF<<(k<<3))&arr[i])>>(k<<3);
if(q[j] == -1)
l = q[j] = f;
else{
l = q[j];
while(np[l][1] != -1)
l = np[l][1];
np[l][1] = f;
l = np[l][1];
}
f = np[f][1];
np[l][0] = arr[i];
np[l][1] = -1;
}
for(l=q[i=j=0];i<0x100;i++)
for(l=q[i];l!=-1;l=np[l][1])
arr[j++] = np[l][0];
}
}

public static void main(String[] args){
int i;
int[] arr = { 1212, 117, 839, 1382, 741, 1357, 1293, 899, 1202, 1227, 982, 1153,
15, 831 ,1202, 287, 417, 329, 674, 1375, 142, 1368, 1395, 1317, 810, 471, 288, 117, 1285,........................, 1313, 5};

System.out.print("original: ");
for(i=0;i System.out.print(arr[i] + " ");
}

System.out.print("\nsorted: ");
for(i=0;i System.out.print(arr[i] + " ");
System.out.println("\nDone ;-)");
}
}