Sei sulla pagina 1di 5

import java.io.

*;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class DEDA_U2_EA_ALDR{
public static void main(String[] args) throws IOException {
/*
Creamos el numero de arreglos que pida el usuario
*/
System.out.print("Ingrese el nmero de puntos que se crearn:" );
int var = 0;
BufferedReader buffer =new BufferedReader(new InputStreamReader(System.i
n));
String linea = "";
try{
linea = buffer.readLine();
}catch(Exception e){}

var = Integer.parseInt(linea);

int array[];
array = new int[var];
int x[];
x = new int[var];
int x1[];
x1 = new int[var];
int y[];
y = new int[var];
int y1[];
y1 = new int[var];
/*
Generamos los puntos aleatorios
*/
for(int c = 0; c< array.length;c++)
{
int puntox= (int)(Math.random()*1000 + 1);
int puntox1 = (int)(Math.random()*1000 + 1);
int puntoy =(int)(Math.random()*1000 + 1);
int puntoy1 = (int)(Math.random()*1000 + 1);
Punto objP = new Punto(puntox,puntox1,puntoy,puntoy1);
double resultado = objP.distancia(objP);
array[c] = (int)resultado;
x[c] = puntox;
x1[c] = puntox1;
y[c] = puntoy;
y1[c] = puntoy1;
objP = null;
}
/*
Mostramos los resultados antes de ordenarlos

*/
System.out.print("Resultados antes de ordenar" );
System.out.println();
for(int i = 0; i < array.length; i++){
System.out.print( array[i]+", Puntos: " + x[i] + ", " + x1[i] + ",
" + y[i] + ", " + y1[i]);
System.out.println();
}
String linea2 = "";
//Se crea un ciclo para crear un men.
while(!linea2.equals("Salir")){
//Imprime el men
System.out.println("Ingrese un numero(1-4): ");
System.out.println("1.- Ordenara la lista con quick sort");
System.out.println("2.- Ordenara la lista con buble sort");
System.out.println("3.- Buscara un valor con metodo secuencial");
System.out.println("4.- Buscara un valor con metodo binario");
System.out.println("Ingrese 'Salir' para cerrar el programa");
//Tenemos la lectura de la cadena que ingrese el usuario
try{
linea2 = buffer.readLine();
}catch(Exception e){}
//la condicin de salida siempre y cuando lo leido sea Salir
if(linea2.equals("Salir")){
}else if(linea2.equals("1")) {
quick_srt(array,0,array.length-1,x,x1,y,y1);
System.out.print("Datos despues de ordenar" );
System.out.println();
for(int i = 0; i < array.length; i++){
System.out.print( array[i]+", Puntos: " + x[i] + ", " + x1[i] + ",
" + y[i] + ", " + y1[i]);
System.out.println();
}
}else if(linea2.equals("2")){
System.out.println("Despues de bubble" );
int array2[]=burbuja(array);
for(int i = 0; i < array2.length; i++){
System.out.print( array2[i]+", Puntos: " + x[i] + ", " + x1[i] + ",
" + y[i] + ", " + y1[i]);
System.out.println();
}
}else if(linea2.equals("3")){
System.out.println("ingrese el nmero que buscar:");
linea2 = buffer.readLine();
int numero = Integer.parseInt(linea2);
System.out.println("La distancia "+numero+ " se encuentra(con el
metodo secuencial) en la posicin: "+BusquedaSecuencial(array, numero));
}else if(linea2.equals("4")){
System.out.println("ingrese el nmero que buscar:");
linea2 = buffer.readLine();
int numero = Integer.parseInt(linea2);

System.out.println("La distancia "+numero+ " se encuentra(con el


metodo binario) en la posicin: "+BusquedaBinaria(array, numero));
}
}

/*
Mostramos el mensaje del punto con mayor distancia ya que es el ltimo al
ser ordenado.
*/
burbuja(array);
if(var>50){
System.out.println("La mayor distancia en el conjunto de puntos es " +
array[array.length-2] + " e involucra al punto: (" + x[array.length-2] + "," + x
1[array.length-2] + ") y al punto: (" + y[array.length-2] + "," + y1[array.lengt
h-2] + ")");
}else{
System.out.println("La mayor distancia en el conjunto de puntos es " + a
rray[array.length-1] + " e involucra al punto: (" + x[array.length-1] + "," + x1
[array.length-1] + ") y al punto: (" + y[array.length-1] + "," + y1[array.length
-1] + ")");
}
}
/*
Ordenamos con el metodo quick_sort
*/
public static void quick_srt(int array[],int low, int n, int x[], int x1[],
int y[], int y1[]){
int lo = low;
int hi = n;
if (lo >= n) {
return;
}
double mid = array[(lo + hi) / 2];
while (lo < hi) {
while (lo<hi && array[lo] < mid) {
lo++;
}
while (lo<hi && array[hi] > mid) {
hi--;
}
if (lo < hi) {
int T = array[lo];
array[lo] = array[hi];
array[hi] = T;
int T1 = x[lo];
x[lo] = x[hi];
x[hi] = T1;
int T2 = x1[lo];
x1[lo] = x1[hi];
x1[hi] = T2;
int T3 = y[lo];
y[lo] = y[hi];
y[hi] = T3;

int T4 = y1[lo];
y1[lo] = y1[hi];
y1[hi] = T4;
}
}
if (hi < lo) {
int T = hi;
hi = lo;
lo = T;
}
quick_srt(array, low, lo, x, x1, y, y1);
quick_srt(array, lo == low ? lo+1 : lo, n, x, x1, y, y1);
}
public static int[] burbuja(int arreglo[])
{
int auxiliar;
int[] arregloOrdenado;
for(int i = 2; i < arreglo.length; i++)
{
for(int j = 0;j < arreglo.length-i;j++)
{
if(arreglo[j] > arreglo[j+1])
{
auxiliar = arreglo[j];
arreglo[j] = arreglo[j+1];
arreglo[j+1] = auxiliar;
}
}
}
arregloOrdenado = arreglo;
return arregloOrdenado;
}
//metodo de bsqueda Secuencial:
public static int BusquedaSecuencial(int vector[], int dato){
for (int i = 0; i < vector.length; ++i)
if (vector[i] == dato)
return i;
return -1;
}
//metodo de busqueda binaria
public static int BusquedaBinaria( int vector[], int dato) {
int inicio = 0;
int fin = vector.length - 1;
int pos;
while (inicio <= fin) {
pos = (inicio+fin) / 2;
if ( vector[pos] == dato )
return pos;
else if ( vector[pos] < dato ) {
inicio = pos+1;
} else {
fin = pos-1;
}
}
return -1;

}
}

Potrebbero piacerti anche