Beruflich Dokumente
Kultur Dokumente
Arreglo: Es una zona de almacenamiento continuo, que contiene una serie de elementos
del mismo tipo.
Para efectos de sta explicacin visualice el arreglo como una serie de cajas unidas
donde podemos almacenar datos del mismo tipo, los arreglos estn indexados con una
serie de nmeros de van de menor a mayor y que sirven para hacer referencia a cada uno
de las cajas dentro del arreglo, en java esta indices comienzan en 0.
Los arreglos y en general las estructuras de datos nos permiten almacenar informacion o
datos, pero ahora nos seria de utilidad hallar la forma de encontrar los datos que
almacenamos en las mismas, para tal fin se han diseados algoritmo de bsquedas.
Los dos elementos fundamentales a tener en cuentas son: un arreglo con datos objeto de
la bsqueda y un elemento o criterio de bsqueda.
He aqu el cdigo:
http://usandojava.blogspot.com/2012/10/busqueda-secuencial-en-un-arreglo.html
[1,2,3,.......,58,59,50,51,52,.......,98,99,100]
Tu amigo te dir que el nmero que deseas adivinar es mayor que 50.
Observa como ya no tienes que gastar intentos con los nmeros comprendidos de 0 a 50.
[51,52,53,.......,73,74,75,76,77,.......,98,99,100]
Tu amigo te dir que el nmero que deseas adivinar es mayor que el 75.
Observa como ya no tienes que gastar intentos con los nmeros comprendidos de 0 a 75.
[76,77,78,.......,85,86,87,88,89,.......,98,99,100]
Tu amigo te dir que el nmero que deseas adivinar es menor que el 87.
Observa como ya no tienes que gastar intentos con los nmeros comprendidos de 0 a 75
y 87 a 100.
[76,77,78,79,80,81,82,83,84,85,86]
Si te has fijado, la tcnica para adivinar el nmero es dividiendo el rango en dos partes, si
el nmero a adivinar es mayor tomamos el rango que nos ha quedado a la derecha sino si
el nmero a adivinar es menor tomamos el rango que nos ha quedado a la izquierda sino
si el nmero es igual al nmero a adivinar, bingo hemos adivinado; si la primera vez no
adivinamos el nmero realizamos los pasos anteriores nuevamente hasta que adivinemos
(asumiendo que el nmero a adivinar existe).
class BusquedaBinaria{
/**
* Busca un valor numerico dentro de un arreglo numerico...
* previamente ordenado usando el metodo de busqueda binaria
*
* @param arreglo con los elementos; dato a buscar
* @return posicion del elemento buscado, en caso de no existir retorna
-1
*/
public static int busquedaBinaria(int vector[], int dato){
int n = vector.length;
int centro,inf=0,sup=n-1;
while(inf<=sup){
centro=(sup+inf)/2;
if(vector[centro]==dato) return centro;
else if(dato < vector [centro] ){
sup=centro-1;
}
else {
inf=centro+1;
}
}
return -1;
}
http://usandojava.blogspot.com/2012/11/busqueda-binaria-en-un-arreglo-usando.html
Bueno esta vez veremos un poco de java, en este articulo veremos como implementar
elmtodo de bsqueda secuencial para buscar un dato en un arreglo.
El mtodo de bsqueda secuencial es de los mas fciles que podemos utilizar para buscar datos(es
aconsejable utilizarlo cuando el vector no es de gran tamao), ya que no requiere que el vector este
ordenado, el mtodo consiste en recorrer el vector de manera secuencial hasta encontrar el dato a buscar.
En el ejemplo creo un vector con 10 datos y luego hago la bsqueda de un dato para saber si esta o no en
el vector.
/**
* BusquedaSecuencial Application
*
* Author: Cristian Torres
*
* Pais: El Salvador
*/
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class BusquedaSecuencial extends JFrame implements ActionListener
{
private JButton btnbuscar;
private JTextField num;
private Label lbl;
}
//metodo de busqueda secuencial
public static int BusquedaSecuencial(int vector[], int Elem){
for (int i = 0; i < vector.length; ++i)
if (vector[i] == Elem)
return i;
return -1;
}
Como puede verse se crea un mtodo que retornara un valor entero y que recibir 2parmetros, que sera
el vector y el dato a buscar. El mtodo recorre el vector y va comparando los datos y si encuentra el
dato retorna la posicin en la que se encontr, si no se encuentra el dato retorna -1.
int x;
x = Integer.parseInt(num.getText());
if(BusquedaSecuencial(valores,x) !=-1){
JOptionPane.showMessageDialog(null,
El Dato"+" "+ x + " "+ "Esta en la Posicion: "+
BusquedaSecuencial(valores,x),
"Busqueda",JOptionPane.INFORMATION_MESSAGE);
}
else
JOptionPane.showMessageDialog(null, "El Dato no se Encuentra",
"Error",JOptionPane.ERROR_MESSAGE);
Declaramos una variable que sera la que tendr el dato a buscar, y luego hacemos uso
delmtodo de bsqueda validando si encontr el dato o no, y le enviamos como argumentos, elvector que
contiene los datos y el dato a buscar.
http://cristiantorresalfaro.blogspot.com/2012/06/buscar-datos-en-arreglo-metodo-busqueda.html
Algoritmos de bsqueda-lineal, bsqueda-binaria y
ordenacin de burbuja
Los desarrolladores normalmente escribien cdigo para buscar datos en un
array y para ordenar ese array. Hay tres algoritmos muy comunes que se
utilizan para realizar estas tareas.
Bsqueda Lineal
// LSearchDemo.java
class LSearchDemo {
Found 72
Bsqueda Binaria
END
// BSearchDemo.java
class BSearchDemo {
72 found
Ordenacin de Burbuja
// BSortDemo.java
class BSortDemo {
public static void main (String [] args) {
int i, pass;
int [] x = { 20, 15, 12, 30, -5, 72, 456 };
-5
12
15
20
30
72
456
Truco:
Esta vez vengo con otro post que fue otra peticion de un usuario
de Codemania que nuevamente les ago una invitacion a que se registren
dejen sus dudas en los diferentes foros de programacion o simplemente
compartan sus codigos.
Esta vez veremos un poco de java(no lo manejo a gran nivel como c# pero
me defiendo xD), en este articulo veremos como implementar
el mtodo de bsqueda secuencial para buscar un dato en un arreglo.
}
//metodo de busqueda secuencial
public static int BusquedaSecuencial(int vector[], int Elem){
for (int i = 0; i < vector.length; ++i)
if (vector[i] == Elem)
return i;
return -1;
}
1 /**
2 * ArrayDemo.java
*
3
* Ejemplo que muestra como buscar un valor en un arreglo de nmeros enteros. Se
4 utiliza el
*/
6
7
/**
8
*
9
* @author Dark[byte]
10
*/
11
class ArrayDemo {
12
14 private static int numeros[] = { 678, 0, 39, 125, 100, 478, 6, 540, 78, 28 };
15
16 /**
*
18
* @param args argumentos de la lnea de comandos.
19
*/
20
public static void main(String[] args)
21
{
22
//imprimimos en pantalla el resultado de buscar 125, 0, y 400 en el
23 arreglo
28
/**
29
* Se realiza una bsqueda lineal para encontrar un valor en un
30
* arreglo de nmeros enteros.
31
*
32
* @param arreglo el arreglo donde se realizara la bsqueda.
33
* @param dato el numero entero que se buscara.
34
* @return true si el valor es encontrado, false en caso contrario.
35 */
38 if (arreglo[i] == dato) {
39 return true;
}
40
}
41
42
return false;
43
}
44
}
45
https://darkbyteblog.wordpress.com/2011/04/11/java-arreglos-busqueda-de-un-valor-int-algoritmo-
46 lineal/
47
Indice de Mtodos
Mtodo de Ordenamiento
Mtodo de Ordenacin
Ejemplos
1.Mtodo de ordenamiento
Es la operacin de arreglar los elementos de un determinado vector en
algn orden secuencial
de acuerdo a un criterio de ordenamiento.
El propsito principal de un ordenamiento es el de facilitar las bsquedas
de los miembros del conjunto ordenado.
Metodos de Ordenacion
3. Bsqueda Secuencial
4. Bsqueda Binaria
Bsqueda Secuencial
Bsqueda Binaria
Ejemplos
Ordenacion
int i,j,n;
double aux,x[];
System.out.println("Ingrese la cantidad de numeros a leer:");
n= Integer.parseInt(br.readLine());
x= new double[n];
for (i=0;i<n;i++){
System.out.println("Elemento["+i+"]:");
x[i]=Double.parseDouble(br.readLine());} for(i=1;i<n;i++){
for(j=n-1;j>=i;j--){
if (x[j-1]>x[j]){
aux=x[j-1];
x[j-1]=x[j];
x[j]=aux;}
}
}
System.out.println("Elemento Ordenado");
for (i=0;i<n;i++){
System.out.println("Elemento["+i+"]:"+x[i]);}
}
}</n;i++){
</n;i++){
</n;i++){
Metodo De Busqueda
int i,n,band;
double x[],elem;
System.out.println("Ingrese los numeros a leer:");
n=Integer.parseInt(br.readLine());
x=new double[n];
System.out.println("Ingrese los elementos del vector:");
for(i=0;i<n;i++){
System.out.println("Elemento["+i+"]:");
x[i]=Double.parseDouble(br.readLine());
} System.out.println("Ingrese el elemento a buscar:");
elem=Double.parseDouble(br.readLine());
band=0;
for(i=0;i<n;i++){
if(x[i]==elem){
System.out.println("El elemento encontrado:"+i);
band=1;
}
}
if(band==0){
System.out.println("No se encontro el elemento:");
}
}</n;i++){
</n;i++){
Media Geometrica
double media[]= new double[999];
double can,sum=1,resul=0;
can=Double.parseDouble(JOptionPane.showInputDialog(null,"Ingre
se Cantida De Elementos: "));
for(int i=0;i<can;i++)
{
media[i]=Double.parseDouble(JOptionPane.showInputDialog(null,"I
ngrese Datos a la Media"));
sum=sum*media[i];
} resul=Math.pow(sum, 1.0/can);
System.out.println("La Media Es Geometrica :"+resul);
}}
</can;i++)
http://programandoconjava.es.tl/Metodos-De-Busqueda-y-Orenacion.htm
A lo largo del tiempo, varias tcnicas identificadas han llevado a proponer algoritmos eficientes para la
resolucin de problemas tpicos en el area de computacin. Entre esos problemas se encuentran el de
bsqueda en un conjunto de datos y el de ordenamiento. Es importante recalcar que cada algoritmo tiene un
nivel de eficiencia diferente, y es importante poder determinar, dadas las caractersticas de un problema en si,
y de las entradas que van a ser procesadas, cual es el algoritmo ms ptimo a ser utilizado.
1.5.1. Algoritmos de
Bsqueda
El ser humano desarrolla un sinnmero de actividades, muchas de las cuales requieren que la recopilacin
de elementos que en ellas se emplean esten ordenados de una determinada manera. Una empresa, por
ejemplo, constantemente necesita realizar bsquedas relacionadas con los datos de sus empleados o
clientes; buscar informacin de un elemento en una lista.
La operacin de bsqueda puede llevarse a cabo sobre elementos ordenados o sobre elementos
desordenados. En el primer caso, la bsqueda se facilita, y por lo tanto se ocupar menos tiempo que si se
trabaja con elementos desordenados.
Los mtodos de bsqueda pueden clasificarse en internos y externos, dependiendo el lugar donde estn
almacenados los datos sobre los cuales se har la bsqueda. Se denomina:
Bsqueda interna si todos los elementos se encuentran en memoria principal (por ejemplo, almacenados
en arreglos, vectores o listas enlazadas).
Bsqueda externa si los elementos se encuentran en memoria secundaria. (Ya sea disco duro, disquete,
cintas magnticas, CDs, memorias flash).
A continuacin nos centraremos en la bsqueda interna. As, la organizacin de los datos sobre la que
resolveremos el problema de la bsqueda consiste en un arreglo de n elementos de tipo elemento (valores
puntuales, registros, etc.); Es necesario que los n elementos sean distintos. Si existen elementos iguales, al
realizar la bsqueda se localiza nicamente uno de ellos, pudiendo dar lugar a errores al no contener la
informacin correcta que se quera recuperar.
Cada algoritmo de bsqueda procura localizar en un arreglo un elemento X. Una vez finalizada la bsqueda
puede suceder:
Que la bsqueda haya tenido xito, habiendo localizado la posicin donde estaba almacenado el
elemento X.
Que la bsqueda no haya tenido xito, concluyendo que no exista ningn elemento X.
Despus de la bsqueda sin xito, a veces es interesante introducir el elemento X. Un algoritmo con tal
objetivo se denomina de bsqueda e insercin
int i = 0;
int n = arreglo.length;
o if (arreglo[i] == valor)
encontrado = true;
o else {
i++;
}
return encontrado;
o int[] arreglo = { 1, 2, 3, 4, 5, 6, 8, 9 };
o System.out.println(b.secuencial(5, arreglo));
http://etherpad.proyectolatin.org/up/bb75f1bf793ae51ce57d5ceabb023f51.
complejidad_busqueda_lineal
Si el elemento buscado es menor que el elemento medio, entonces sabemos que el elemento est en la mitad
inferior de la tabla.
Si es mayor es porque el elemento est en la mitad superior.
Si es igual se finaliza con xito la bsqueda ya que se ha encontrado el elemento.
Si se vuelve a repetir el mismo proceso anterior con la parte del arreglo que no hemos descartado, iremos
avanzando rpidamente hacia el valor que queremos localizar.
Puede darse el caso en el que el sub-arreglo a dividir est vaco y an no se a encontrado el elemento. Sobre
entendemos que el valor buscado no existe en el arreglo.
Por consiguiente el algoritmo es O(log2n) en el peor de los casos. En el caso medio O(log2n) en el caso
medio y O(1) en el mejor de los casos.
En general, este mtodo realiza log2 (n) comparaciones antes de encontrar el elemento, o antes de descubrir
que no est. Este nmero es muy inferior que el necesario para la bsqueda lineal para casos grandes.
En el mejor caso, la bsqueda binaria podra toparse con el elemento buscado en el primer punto medio,
requirindose slo una comparacin de elementos. Esto equivale al mejor caso durante una bsqueda
secuencial, pero en el peor de los casos la bsqueda binaria es mucho ms rpida cuando N es grande.
Mejor Caso: En sus casos ptimos, tanto la bsqueda secuencial como la binaria requieren slo una
comparacin; esto significa que sus tiempos de ejecucin ptimos no dependen de la cantidad de datos: son
constantes y por tanto proporcionales a 1, es decir, son de O(1).
Peor Caso: En el peor caso, la bsqueda secuencial y la binaria s dependen de N. La primera recorre todo el
arreglo, requiriendo un tiempo de O(n); la binaria divide el arreglo, requiriendo slo un tiempo O(log n).
Surge entonces una pregunta, es posible lograr una bsqueda de O(1)?, es decir, una bsqueda que tome
el mismo tiempo para buscar cualquier elemento de una lista. La respuesta es s. Para ello se utiliza la tcnica
hashing.Este mtodo se conoce como transformacin de claves (clave-direccin) y consiste en convertir el
elemento almacenado (numrico o alfanumrico) en una direccin (ndice) dentro de un arreglo, de manera
que se puede acceder al elemento directamente.
Ejemplo.
Vamos a partir de un sencillo ejemplo. Supongamos que tenemos una lista de empleados de una pequea
empresa. Cada empleado tiene asignado un nmero de identificacin de 0 hasta 99. Entonces se necesitara
un vector de tamao fijo de 100 posiciones para almacenar los empleados. Ahora, podramos tener una
relacin directa entre el valor clave de cada empleado con el ndice del arreglo. As:
De esta forma es posible acceder directamente a la informacin de cada empleado conociendo el nmero de
identificacin de cada empleado. Por ejemplo, si se quiere acceder al empleado con identificacin 3,
simplemente se utilizara la instruccin: arreglo[3].
Sin embargo, hacer esta correspondencia en la prctica no es posible, ya que generalmente los nmeros de
identificacin son nmeros largos como es el caso de los nmeros de cdula. Entonces, no sera posible
crear un arreglo tan grande para contener tal cantidad de elementos.
Para ello, se necesita tener una funcin hash, que determine, a partir del campo clave, en qu posicin del
arreglo estar cada objeto. La funcin hash, determinar el mtodo de acceso al arreglo.
En este caso, la funcin hash aplicar la operacin: CLAVE MOD 100. As por ejemplo, si la clave es
98393204, la funcin hash devolver que se debe acceder a la posicin 4 (98393204 MOD 100 = 4).
De la siguiente manera:
Colisiones
El esquema explicado anteriormente de la funcin hash, no garantiza direcciones nicas (colisiones). Por
ejemplo, para las claves 98393204 y 76236304, la funcin hash arrojara la misma posicin: 4.
Las colisiones son imposibles de evitar, lo que se debe tener en cuenta es que una buena funcin hash, debe
minimizar las colisiones extendiendo los registros uniformemente a travs de la tabla.
Existen varias alternativas para manejar las colisiones. Las cuales se explican a continuacin.
Para buscar un elemento con esta tcnica, se aplica la funcin hash sobre la clave, luego se compara la clave
devuelta con la clave real. Si las claves no coinciden, se hace una bsqueda secuencial comenzando por la
siguiente posicin del array. Nuevamente, si se llega al final del vector, se sigue buscando desde el principio.
Mtodo 2: Rehashing
Si el primer clculo de la funcin hash produce una colisin, se usa la direccin transformada como entrada
para una funcin rehash y se calcula una nueva direccin. Un ejemplo de funcin rehash sencilla
sera: (Direccin ocupada + 1) mod 100. Si el resultado sigue siendo un espacio ocupado, se puede aplicar la
funcin rehashing hasta obtener un espacio disponible.
La clave 36670003 es pasada como entrada a la funcin hash, sta arroja la direccin 3, la cual en el caso
est ocupada; por lo tanto, tendra que pasar por la funcin rehashing. En este caso la funcin rehashing
devolvera la nueva direccin 4. Si el valor 4, est ocupado, se aplica la funcin rehashing hasta obtener un
espacio disponible.
La idea general de usar la clave para determinar la direccin del registro es una excelente idea, pero se debe
modificar de forma que no se desperdicie tanto espacio. Esta modificacin se lleva a cabo mediante una
funcin que transforma una clave en un ndice de una tabla y que se denomina funcin de Randomizacin o
Hash.
Si H es una funcin hash y X es un elemento a almacenar, entonces H(X) es la funcin hash del elemento y se
corresponde con el ndice donde se debe colocar X. En nuestro ejemplo, la funcin hash sera H(X)=X % 53
(funcin resto).
Los valores generados por H deben cubrir todo el conjunto de ndices de la tabla. Adems, el tamao de la
tabla debe ser un poco ms grande que el nmero de elementos que han de ser insertados, aunque queden
posiciones de la tabla sin uso.
El mtodo anterior tiene una deficiencia: suponer que dos elementos X e Y son tales que H(X) = H(Y).
Entonces, cuando un el elemento X entra en la tabla, ste se inserta en la posicin dada por su funcin Hash,
H(X). Pero cuando al elemento Y le es asignado su posicin donde ser insertado mediante la funcin hash,
resulta que la posicin que se obtiene es la misma que la del elemento X. Esta situacin se denomina colisin
o choque.
Una buena funcin Hash ser aquella que minimiza las colisiones, y que distribuya los elementos
uniformemente a travs del arreglo. Esta es la razn por la que el tamao del arreglo debe ser un poco mayor
que el nmero real de elementos a insertar, pues cuanto ms grande sea el rango de la funcin de
randomizacin, es menos probable que dos claves generen el mismo valor de asignacin o hash, es decir,
que se asigne una misma posicin a ms de un elemento.
Habr que llegar a un compromiso entre Eficiencia en Espacio-Tiempo: el dejar espacios vacos en la tabla es
una deficiencia en cuanto a espacio, mientras que reduce la necesidad de resolver los casos de choque en la
asignacin, y por lo tanto es ms eficiente en trminos de tiempo.
Al realizar la bsqueda y comprobar si el elemento buscado est en la posicin dada por su tabla hash, si esa
posicin ya est ocupada por otro elemento con el mismo valor de hashing, se seguir buscando a partir del
inicio de la zona de desbordamiento de manera secuencial, hasta encontrar el elemento o llegar al final de
dicha zona de desbordamiento.
Siguiendo con el ejemplo, para cada cdigo se obtena el residuo (resto) de su divisin por un nmero primo
(en este caso el 53). Es recomendable usar nmeros primos ya que que reduce la probabilidad de colisin al
establecer funciones del tipo: H(X) = (X % primo)
Ahora bien, cul valor primo escoger? En este ejemplo se manejan 30 cdigos, de modo que ese valor debe
ser superior a 30, y que su magnitud se acerque al doble de elementos, por ello una buena opcin era el 53 (o
tambin el 61). Valores primos muy cercanos a la cantidad original de datos da lugar a demasiadas colisiones
y un valor primo grande (por ejemplo, 97) da lugar a un considerable desperdicio de espacio (casillas vacas).
Cmo nos quedaran ubicados los elementos en el vector? Hay que tener en cuenta algo ms: como el valor
primo utilizado en la funcin de Hashing fue el 53, inicialmente el vector destino tendra 53 casillas, pero a eso
hay que agregarle las casillas de la zona de desbordamiento, de modo que habra que aumentar esas casillas
alrededor de un 25%, y en ese caso nuestro vector quedara con 53 * 1.25 = 66.25, o sea 66 casillas en total.
Las 53 primeras almacenarn los cdigos segn la posicin que resulte al aplicar la funcin de Hashing, las
13 restantes representan la zona de desbordamiento a donde irn los cdigos que colisionen.
Mostra
a) 18
b) 3
c) 100
d) 2
ubl
/**
*posicin del arreglo. Para ello busca el menor valor de todo el arreglo
*/
o intn = arreglo.length;
for(inti = 0; i < n -
intmenor = arregl
int posMenor = i;
menor = arreg
o }
o }
o // el que se encuentr
o inttemp = arreglo[i
o arreglo[i] = menor;
/
*
*
*/
ar
*
ublic class ClienteMain {
o Ordenamiento o = newOrdenamiento(
o int[] arreglo = {
o mostrar(arreglo);
/**
* @param arreglo
*/
o Sy
o }
Estudio de la complejidad:
/**
*/
o intn = arreglo.length;
arreglo[j] = arreglo[j
o }
o }
*/
o ar
o }
o int[] arreglo = {
o mostrar(arreglo);
/**
* @param arreglo
*/
o Sy
o }
*
}
El algoritmo anterior funciona de la siguiente manera:
En esta segunda iteracin podemos ver que varios elementos del arreglo han cambiado
El proceso termina cuando solo quede un elemento e
Estudio de la complejidad
El algoritmo implementado
ubl
/**
* Este metodo separa la secuencia en dos grupos: una parte con los valores
* valores a la par
* @param arregloSinOrdenar
*/
o int n = arreglo.length;
for(int j = i; j > 0
inttemp = arreglo[j];
arreglo[j] = arreglo[j
o }
o }
o Ordenamiento o = newOrdenamiento()
o int[] arreglo = {
o mostrar(arreglo);
/**
* @param arreglo
*
*/
o Sy
o }
prim
segu
*Estudio de la complejidad:
El bucle externo se ejecuta
1 + 2 + + (n-1) = n(n-1)/2
pub
/**
* Realiza comparaciones entre elementos NO consecutivos, separados por u
* distancia salt El valor salt al principio es n/2 y va decreciendo en
* cada iteracin hasta llegar a valer 1. Cuando salt vale 1 se compar
* elementos consecutivos. El valor se encontrar ordenado cuando salto
* valga 1
*
*
* @param arregloSinOr
* arreglo sin ordenar
*
*/
int n = arregl
int salto = n;
booleanordenado;
o while(salto > 1) {
o sal
do{
ordenado = true;
for(intj = 0; j <
intk = j + salto;
intaux = arreglo[j];
arreglo[j] = arre
arreglo[k] = aux;
o
o }
o Ordenamiento o = newOrdenamiento();
o int[] arreglo = {
o mostrar(arreglo);
/**
* Muestra por co
* @param arreglo
*/
o Sy
o }
S
*
}
*Estudio de la complejidad
El Shell sort
observaciones:
1. El ordenamiento por insercin es eficiente si la entrada est "casi ordenada".
2. El ordenamiento
El algoritmo Shell sort mejora el ordenamiento por insercin comparando elementos separados por un espacio
de varias posiciones. Esto permite que un elemento
ubl
/**
* las dos mitades. El caso base es aquel que recibe un vector con ningn
* elemento,
* @param arreglo
* , arreglo
* @param ini
* , posicion
* @param fin
*/
o public vo
o intm = 0;
m = (ini + fin) / 2;
o m
/**
* @param arreglo
* arreglo de
* @param ini
* posicin
* @param m
* posicin i
* @param fin
*/
o private v
o intk = 0;
o inti = ini;
o intj = m + 1;
if (arreglo[i] < a
b[k]
i++;
k++;
}else {
b[k]
j++;
o }
while(i<= m) {
b[k]
i++;
o k
while(j<= fin) {
b[k]
j++;
o k
o }
o a
/**
*/
o intn = arreglo.length;
o mergeSort(arre
ublic classClienteMain {
o Ordenamiento o =newOrdenamiento();
o int[] arreglo = {
o mostrar(arreglo);
/**
* @param arreglo
o Sy
o }
Tene
*Estudio de la complejidad
El algoritmo es recursivo esa razn que se quiere determinar el tiempo empleado por cada una de las 3 fases
del algoritmo divide y vencers. Cuando se llama a la funcin mezclista se deben mezclar las dos listas mas
pequeas en una nueva lista con n elementos. la
T(n) = n + 2T(n/2) si n>1 y 1 en otro caso. De esta forma, aplicando expansin de recurrencia se tiene:
pub
/
*
* Este algoritmo divide en array en dos subarray, que se pueden orde
* modo independiente. Se selecciona un elemento especfico del array
* arreglo[centro] llamado pivote y se divide el array original en do
* subarrays que se ordenar
*
*
* @param arreglo
* arreglo que s
* @param inicio
*posicin de inicio - ORDEN(
* ORDEN(N*N)
* @param fin
*
*/
int
o do{
// s
o i++;
// s
o j--;
arreglo[i] = arre
arre
i++;
o j
}
}
o if (inicio < j)
quickSort(a
*
}
/**
*
*
* @param arregloSinOr
* arreglo sin ordenar
*
*/
public int[] quickSortTomaDatos(int[] arregloSinOrd
int[] arreglo = darCopiaValores(arregloSi
quickSort(arreg
re
}
/
*
*
*/
public int[] darCopiaValores(int[] arreglo) {
int[] arregloNuevo = new int[arreglo.len
for(inti = 0; i < arreglo.len
arregloNuevo[i] = arr
}
}
ublic classClienteMain {
o Ordenamiento o = newOrdenamiento();
o int[] arreglo = {
o mostrar(arreglo);
m
}
/**
* @param arreglo
*/
o Sy
o }
*
Estabilidad: NO es estable.
Requerimientos de Me
Tiempo de Ejecucin:
*Caso pro
f(1) = 1
f(n) = n + 2 f(n/2)
La forma cerrada de esta expresin es: f(n) = n log2n Es decir, la complejidad es O(n log2n).
*El peor
Ventajas:
El ms rpido
No requiere
Desventajas:
Implementacin un poco ms complicada.
Mucha diferencia entre el peo
2. Cuando tod
a) Inser
b) Shell
c) MergeSort
3. Cuando la
a) Inser
b) Shell
c) MergeSort
4. Cuando la
a) Inser
b) Shell
c) MergeSort
5. A continuacin se desc
a) Se recorre el vector
Primero se compara V[i] con V[i+1] para todos los valores de i pares
Luego se compara V[i] con V[i+1] para todos los valores de i impar
*Cada vez que V[i] es mayor que V[i+1] se intercambian los valores.
http://escritura.proyectolatin.org/estructura-de-datos/algoritmos-de-ordenamiento-y-busqueda/
MTODOS DE BSQUEDA
Ejemplo: Se busca 4.
1 2 3 4 5 6 7 8 9
1 2 3 4 5
3 4 5
Bsqueda Hashing
El tiempo ocupado en ordenar un arreglo y buscar un elemento mediante la bsqueda
binaria es similar al de buscar secuencialmente en un arreglo desordenado, por lo cual
se cre un mtodo alternativo para trabajar con las operaciones bsicas para los datos
(ingresar, eliminar y buscar), el Hashing. Su principal caracterstica es que ingresa
cada elemento en un lugar especfico determinado por el mdulo de ste, por lo cual
cada vez que se necesite buscar un elemento slo bastar calcular su posicin por el
mismo mtodo.
Existen dos formas de Hashing distintas. El primero, llamado Hashing Cerrado, es una
estructura de datos esttica por lo cual usa un tamao fijo para el almacenamiento,
por lo que limita el tamao de los conjuntos. El segundo, llamado Hashing Abierto, es
una estructura de datos dinmica por lo cual no impone un lmite al tamao del
conjunto.
HASHING CERRADO
Existen distintos tipos de Hashing cerrados. Los ms comunes son el lineal, el doble y
el directo, y se diferencian unos de otros por la forma de resolver las colisiones.
El Hashing doble aplica una segunda funcin Hashing cuando se produce una colisin,
para determinar el incremento con el cual buscar la prxima posicin. Esta alternativa
requiere tablas con nmeros primos de elementos para asegurar el recorrido de todos
los lugares posibles.
#define TRUE 1
#define FALSE 0
#define VACIO 1
struct tabla{
int llave;
int libre;
};
struct tabla tabhash[10];
HASHING ABIERTO
El Hashing abierto maneja las colisiones generando una lista enlazada en cada una de
las posiciones de la tabla, es decir, si dos valores poseen un mismo valor para Hashing
estarn dentro de una misma lista enlazada.
struct nodo {
int dato;
struct nodo *sgte;
};
http://www.angelfire.com/my/jimena/estructuras/materia6.htm