Software">
Quicksort
Quicksort
Quicksort
INTRODUCCIÓN
1
Resumen:El método Quick Sort es considerado el método de ordenamiento más rápido y gracias a
su rápida implementación y su reducido tiempo de ejecución. En este breve proyecto pretendemos
demostrar la efectividad del método dentro de una interfaz visual que sea fácil de usar y amigable
con el usuario. La implementación se realizó en la plataforma de desarrollo Netbeans (lenguaje
Java) para lograrlo se optó por aprovechar el “JFrame Form” provista en la IDE, haciendo posible
visualizar de manera demostrativa y dinámica como funciona dicho método, “pasada por pasada”
es decir, cada iteración realizada por el programa, para de este modo ejemplificar de una manera
sencilla algunas de las aplicaciones prácticas que le podría dar un usuario promedio.
Abstract: The Quick Sort method is considered the fastest sorting method and thanks to its rapid
implementation and reduced execution time. In this short project we intend to demonstrate the
effectiveness of the method within a visual interface that is easy to use and user-friendly. The
implementation was carried out in the Netbeans development platform (Java language). To achieve this, it
was decided to take advantage of the "JFrame Form" provided in the IDE, making it possible to view in a
demonstrative and dynamic way how said method works, "pass by pass" that is to say , each iteration
carried out by the program, in order to exemplify in a simple way some of the practical applications that
an average user could give it.
1
Estudiante de Ingeniería en Sistemas de Información, estebin-sa@hotmail.com
2. Estudiante de Ingeniería en Sistemas de Información, jean05_pierre96@hotmail.com
3. Estudiante de Ingeniería en Sistemas de Información, juanjbeltran94@gmail.com
Las interfaces gráficas de usuario (GUI) ofrecen al usuario ventanas, cuadros de diálogo, barras de
herramientas, botones, listas desplegables y muchos otros elementos con los que ya estamos muy
acostumbrados a tratar.
Las aplicaciones son conducidas por eventos y se desarrollan haciendo uso de las clases que para ello nos
ofrece la API de Java.
La API de Java proporciona una biblioteca de clases para el desarrollo de Interfaces gráficas de usuario
(en realidad son dos). La biblioteca proporciona un conjunto de herramientas para la construcción de
interfaces gráficas que tienen una apariencia y se comportan de forma semejante en todas las plataformas
en las que se ejecuten. La estructura básica de la biblioteca gira en torno a componentes y contenedores.
Los contenedores contienen componentes y son componentes a su vez, de forma que los eventos pueden
tratarse tanto en contenedores como en componentes. La API está constituida por clases, interfaces y
derivaciones. AWT y Swing.
En nuestro caso usaremos la plataforma de desarrollo Apache NetBeans en la versión 12.1, es un proyecto
Apache de alto nivel que abordan las necesidades de los desarrolladores, usuarios y empresas como base
para sus productos; en particular, para permitirles desarrollar estos productos de manera rápida, eficiente
y sencilla aprovechando las fortalezas de la plataforma Java y otros estándares relevantes de la industria
informática.
Nota
El proceso de instalación no lo describimos pues no es el objetivo primario de este trabajo siendo este
bastante sencillo e intuitivo. El paquete de instalación lo podemos obtener de la siguiente dirección web:
https://netbeans.apache.org/download/in
dex.html
2. METODOLOGÍA
Se realiza un estudio experimental en base al ciclo en V del desarrollo de aplicaciones que consiste en
asociar cada fase del desarrollo con la fase de validación que corresponde hasta la última fase de
implementación, pasando por las cuatro fases que son de Estudio, Diseño, Codificación y Pruebas.
3. Se repiten los pasos anteriores, pero ahora para los conjuntos de datos que se encuentran a la izquierda
y a la derecha de la posición de X en el arreglo.
4. El proceso termina cuando todos los elementos se encuentran en su posición correcta en el arreglo.
3. RESULTADOS Y DISCUSIÓN
Se decidió usar la plataforma Apache NetBeans en su versión 12.1 por sus potentes herramientas,
facilidad de uso y versatilidad para el desarrollo de aplicaciones, en este caso se implementará un JFrame
que viene integrado dentro del programa a manera de formulario para uso por parte del usuario. Dicho
esto, cabe recalcar que el proceso de instalación es muy sencillo y que la aplicación prácticamente está
lista para usarse al momento.
Para demostrar la efectividad del método de ordenamiento que elegimos, optamos por crear una interfaz
visual en la que el usuario ingrese valores y pueda visualizarlos dentro de una JTextAreay de igual
manera el resultado se imprima en otro de estos controles. El primer paso sería abrir Netbeans, crear un
nuevo proyecto y dentro de este añadir un JFrame.
Luego de eso sigue el diseño de la interfaz visual, para lo cual vamos a necesitar varios componentes del
pallete que nos ofrece NetBeans. Necesitaremos un campo de texto para que el usuario ingrese los
números al arreglo para su posterior ordenamiento
TresJButton, uno (Agregar) que añada lo que el usuario colocó en el campo a la lista del primer
JTextArea y otro (Limpiar) que borredel mismo control la lista de elementos para poder volver a usarla
interface. Un tercero (Ordenar) que ejecuta el código de Quick Sort.
Dos JTextArea para visualizar la lista de datos ingresada por el usuario y otra para visualizar el resultado
del ordenamiento del arreglo.
Por último se agregan etiquetas para enunciar dentro de la interface qué es lo que hace nuestro programa.
Con todos estos componentes, nuestra interfaz visual tendrá una apariencia similar a esta.
Para codificar el botón de (Agregar) y colocar los números introducidos por teclado, primero se usó un
evento de click (jButton1ActionPerformed) en ambos botones independientemente y se colocó el
siguiente código:
Botón Agregar
privatevoid
jButton1ActionPerformed(java.awt.event.
ActionEventevt) {
if(!txtNum.getText().equals("")){
lista.add(Integer.parseInt(txtNum.getTe
xt().toString()));
txtNum.setText("");
txtNum.requestFocus();
visualizar();
}else{
JOptionPane.showMessageDialog(null,
"Inserta valores a lista");
}
}
Botón Limpiar
Private void
jButton2ActionPerformed(java.awt.event.
ActionEventevt) {
lista.clear();
txtNum.setText("");
txaNum.setText("");
items=0;
Botón Ordenar
privatevoid
jButton3ActionPerformed(java.awt.event.
ActionEventevt) {
// TODO
addyourhandlingcodehere:
if(!txaNum.getText().equals("")){
items=0;
txaPasadas.setText("");
txaPasadas.append("Pasos de
Ordenación\n\n");
QuickSort();
JOptionPane.showMessageDialog(null,alea
torioNum(100,1));
}else{
JOptionPane.showMessageDialog(null,
"Inserte valores");
Nota: Se colocó también un panel de aviso con el texto “Inserte valores” que saldrá a pantalla cuando el
campo de texto se encuentre vacío.
Para este punto el usuario puede añadir datos propios al arreglo para ordenar con el aplicativo.
txaNum.setText("");
String list="";
for(int i=0;i<lista.size();i++)
{
list+=lista.get(i)+"\n";
}
txaNum.setText(list);
}
Transformar: utilizamos para que en el campo de visualización del ordenamiento sólo se efectúe
números y se colocó el siguiente código.
Object numeros[]=new
Object[lista.size()];
numeros=lista.toArray();
for(int i=0;i<lista.size();i++)
{
n[i]=Integer.parseInt(numer
os[i].toString());
}
return n;
}
PrintList: función para imprimir las pasadas y el ordenamiento principal con el siguiente código:
for(int f=0;f<lt.length;f++){
r=r+lt[f]+" ";
}
txaPasadas.append(r+"\n");
}
En esta función colocamos un ciclo de repetición que vaya recorriendo los elementos de la lista para que
se pueda visualizar los cambios en la posición de todos los elementos con cada pasada.
OrdenarQuick
En esta función colocaremos nuestra versión del algoritmo de Quicksort para lo que necesitaremos
declara, tanto un arreglo como 2 variables de tipo int que funcionaran como punteros al momento de
recorrer al arreglo tanto del lado izquierdo como del lado derecho del elemento pivote.
Como se puede suponer, la eficiencia del algoritmo depende de la posición en la que termine el pivote
elegido.
En el mejor caso, el pivote termina en el centro de la lista, dividiéndola en dos sublistas de igual tamaño.
En nuestro caso, y debido a la baja complejidad del algoritmo colocamos como orden
pivote=vector[(p+u)/2].
En el peor caso, el pivote termina en un extremo de la lista. El orden de complejidad del algoritmo es
entonces de O(n²). El peor caso dependerá de la implementación del algoritmo, aunque habitualmente
ocurre en listas que se encuentran ordenadas, o casi ordenadas. Pero principalmente depende del pivote, si
por ejemplo el algoritmo implementado toma como pivote siempre el primer elemento del array, y el
array que le pasamos está ordenado, siempre va a generar a su izquierda un array vacío, lo que es
ineficiente.
En el caso promedio, el orden es O(n·log n), esta vez debido que no implementamos un codigo para
números masivos decidimos optar por un orden simple que coloque al dato pivote en el centro del arreglo,
para ello colocamos el siguiente código:
int i=p,j=u;
int pivote=vector[(p+u)/2];
int aux;
do{
while(vector[i]<pivote)i++;
while(vector[j]>pivote)j--;
if(i<=j){
aux=vector[j];
vector[j]=vector[i];
vector[i]=aux;
i++;
j--;
}
}while(i<=j);
PrintList();
if(p<j)OrdenarQuick(vector,p,j);
if(u>i)OrdenarQuick(vector,i,u);
}
Los rasgos más importantes destacar en este código es el recorrido que toma el algoritmo al recorrer
constantemente después de declarar como pivote al dato más cercano del centro, se puede observar en la
línea de declaración del dato pivote que se coloca justamente en la mitad de la lista. Es importante
también resaltar el llamado que se hace a la función Sprint List que hicimos previamente.
Una vez revisados todos los posibles errores de identacion lo único que queda es compilar y correr el
programa.
4. CONCLUSIONES
Se debe tomar en cuenta los nombres de los componentes default que nos arroja el JFrame, en nuestro
caso optamos por cambiar de nombre algunas variables tanto como para área de texto como para campos
de texto para evitar errores de identacion.
El conocimiento en base a las todas las características que maneja una plataforma de programación en
java, como lo es NetBeans, puede significar un aumento en la velocidad de creación de un programa ya
que el desarrollo visual en JFrame es sumamente intuitivo con el usuario y facilita mucho la
implementación de un código a diferentes acciones o eventos.
Existen varios métodos de ordenación con diferentes puntos de vista en cuanto a eficiencia y propósitos
generales, el propósito del Quicksort con caracteres de tipo integer funciona perfectamente lo cual nos da
la pauta para poder implementarla también con cadenas de caracteres.
Prestar mucha atención a los errores de identacion al momento de establecer parámetros para bucles o
cambiar las posiciones de llamado a funciones dentro del algoritmo, ya que en varias ocasiones pueden
llegar a alterar el resultado al momento de visualizar las pasadas o incluso el arreglo ordenado.
El JFrame nos permite también mover los componentes visuales de manera más estética y eficiente, se
debe tener en cuenta la imagen con la que se va a presentar al programa para que el usuario no tenga
problemas identificando sus partes al momento de correrlo.
Considerar las especificaciones del algoritmo de Quicksort para que el programa logre mostrar cada una
de las pasadas antes del que el arreglo este completo ya que una llamada o un ciclo de repetición mal
limitado puede causar el área de texto refleje únicamente el número de pasadas conteniendo el arreglo
ordenado sin mostrar el proceso y los cambios efectuados
REFERENCIAS